งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

งานนำเสนอกำลังจะดาวน์โหลด โปรดรอ

chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส

งานนำเสนอที่คล้ายกัน


งานนำเสนอเรื่อง: "chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส"— ใบสำเนางานนำเสนอ:

1 chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส
WATTANAPONG SUTTAPAK, SE, ICT, UP, Thailand

2 วัตถุประสงค์ เข้าใจคุณสมบัติและหลักการของคลาสนามธรรม
สร้างคลาสนามธรรมได้ และสามารถบอกได้ว่าคำสั่งใดทำให้เกิดข้อผิดพลาดในคลาสนามธรรม สามารถเขียนโปรแกรมประยุกต์ใช้งานคลาสนามธรรมได้ เข้าใจคุณสมบัติและหลักการของอินเตอร์เฟสคลาส สร้างอินเตอร์เฟสคลาสได้ และสามารถบอกได้ว่าคำสั่งใดทำให้เกิดข้อผิดพลาดในอินเตอร์เฟสคลาส สามารถเขียนโปรแกรมประยุกต์ใช้งานอินเตอร์เฟสคลาสได้ เข้าใจถึงความเหมือนและความแตกต่างระหว่างคลาสนามธรรมและอินเตอร์เฟสคลาส มีความเข้าใจในการเลือกใช้งานที่ต่างกันของคลาสนามธรรมและอินเตอร์เฟสคลาส

3 Abstract class การ extends(inherit) สืบทอดได้ทีละ 1 class เท่านั้น
หมายถึง class ที่ไม่สามารถสร้าง instance ได้(สร้าง instance class แบบปกติ) คุณสมบัติ abstract class มีคำว่า abstract อยู่หน้า class นั้น method ภายใน abstract class มีหรือไม่มีคำว่า abstract อยู่หน้าชื่อ method นั้นก็ได้ ถ้าไม่มี abstract นำหน้าชื่อ method ให้เขียน method ตามปกติ ถ้ามี abstract นำหน้าชื่อ method หมายถึง method นั้นจะยังไม่สมบูรณ์ ต้องถูก override method การเรียกใช้งาน abstract class ทำได้ 2 วิธีคือ new instance และทำการ override ทุกๆ method ที่เป็น abstract method สืบทอดคุณสมบัติ(extends class) โดยแบ่งเป็นสองแบบ ถ้า class ที่มาสืบทอดถูกประกาศเป็น abstract class ไม่จำเป็นต้อง override method เลยก็ได้ ถ้า class ที่มาสืบทอดเป็น class ทั่วไป ต้องสร้าง abstract method ให้เป็น method ที่ สมบูรณ์ ทั้งหมด การ extends(inherit) สืบทอดได้ทีละ 1 class เท่านั้น

4 Abstract class ตัวอย่าง abstract class ในรูปแบบต่างๆ
void printTxt(){ System.out.println("This is text."); } public abstract class Abstract {} abstract class Abstract {} abstract class Abstract { abstract void printTxt(); } abstract class Abstract { abstract void printTxt(){ System.out.println("This is text."); } abstract class Abstract { void printTxt(){} }

5 Abstract class ตัวอย่าง abstract class ในรูปแบบต่างๆ
abstract void printTxt(); } abstract class Abstract { abstract int printTxt(); } abstract class Abstract { void printTxt(){ System.out.println("This is text."); } abstract void greeting(); abstract class Abstract { abstract void printTxt(); abstract void greeting(); }

6 Abstract class class Abstract { void printTxt(){
System.out.println("This is text."); } ตัวอย่าง abstract class ในรูปแบบต่างๆ abstract class Abstract { void printTxt(){ System.out.println("This is text."); } void greeting() { System.out.println(“Hello"); class Abstract { void printTxt(){ System.out.println("This is text."); } abstract void greeting();

7 Abstract class Hello ตัวอย่าง 1.1 Abstract.java MainAbstract.java
abstract class Abstract { void printTxt() { System.out.println("This is text."); } abstract void greet(); public class MainAbstract { public static void main(String[] args) { Abstract2 a = new Abstract2(); a.greet(); //a.printTxt(); } class Abstract2 extends Abstract { void greet(){ System.out.println("Hello"); //สร้าง instance class Abtract โดยตรงไม่ได้ //extend class Abtract เป็น Abstract2 Hello

8 Abstract class Hello public class MainAbstract {
ตัวอย่าง 1.2 new instance Abstract.java MainAbstract.java abstract class Abstract { void printTxt() { System.out.println("This is text."); } abstract void greet(); public class MainAbstract { public static void main(String[] args) { Abstract a = new Abstract() { void greet(){ System.out.println("Hello"); } a.greet(); //สร้าง instance class Abtract แล้ว override method แล้วแบบไหนดีกว่ากัน ? ตัวอย่าง 1.1 กับ 1.2 Hello

9 Interface class เป็น class ที่มีคุณสมบัติคล้าย abstract class คือ
มี abstract method เหมือนกัน(ใช้คำว่า abstract หน้าชื่อ method) โดยมีรูปแบบที่แตกต่างคือ ใช้คำว่า interface นำหน้า class แทน abstract class ตัวแปรที่สร้าง(attribute) ทั้งหมดเป็นประเภท static final อัตโนมัติ method ทั้งหมดเป็น public abstract อัตโนมัติ การสืบทอดคุณสมบัติจาก class แม่เปลี่ยนจาก extends เป็น implements โดย interface class จะต้องถูก implements method ทั้งหมด จึงจะสามารถสร้าง instance ได้

10 Interface class public interface ExIm1 {} interface ExIm1 {}
void printTxt(); } interface ExIm1 { abstract void printTxt(); } interface ExIm1 { int myVar = 1; void printTxt(); } interface ExIm1 { static final int myVar = 1; } interface ExIm1 { int myVar = 1; } interface ExIm1 { void printTxt(){} void greeting(); } interface ExIm1 { void printTxt(){} } interface ExIm1 { int myVar; }

11 interface class static ? เป็น modifier
ถูกนำไว้หลัง modifier ที่ควบคุม visibility(public protected default private) นำหน้า class ได้แต่ต้องเป็น nested class(class ที่อยู่ภายใต้ class ) (ดูตัวอย่างสไลด์ต่อไป) นำหน้า method และ variable ได้ ไม่สามารถนำหน้า abstract method ได้ เมื่อมีการใช้ใน class จะสามารถเรียกใช้ได้ โดยตรง (ดูตัวอย่างสไลด์ต่อไป) เมื่อมีการใช้ใน method จะสามารถเรียก class.method ได้โดยตรง เมื่อมีการใช้ใน variable จะสามารถเรียก class.method ได้โดยตรง ภายใน class ที่มีการใช้ static variable สามารถเรียกใช้ได้เลยและค่าจะเปลี่ยนไปเมื่อถูกเรียกใช้งาน

12 interface class nested class class OuterClass{
class OtherClass{ //Use of a static nested class: private OuterClass.StaticNestedClass staticNestedClass = new OuterClass.StaticNestedClass(); //Doesn't work private OuterClass.InnerClass innerClass = new OuterClass.InnerClass(); //Use of an inner class: private OuterClass outerclass= new OuterClass(); private OuterClass.InnerClass innerClass2 = outerclass.getAnInnerClass(); private OuterClass.InnerClass innerClass3 = outerclass.new InnerClass(); } class OuterClass{ public static class StaticNestedClass{ } public class InnerClass{ จะเห็นว่า OtherClass สามารถ เรียกใช้ StaticNestedClass ผ่าน OuterClass ได้โดยตรง ในขณะที่ OtherClass ไม่สามารถ เรียกใช้ InnerClass ผ่าน OuterClass ได้โดยตรง โดย ต้องทำการสร้าง instance ของ OuterClass ก่อน

13 interface class ผลลัพธ์ที่ได้ 5 11 10
static method class Ex1 { public static void main(String[] args) { System.out.println(nestedEx1.i); nestedEx1.i +=5; nestedEx1.getI(); nestedEx1.getData(); new nestedEx1().getData(); } class nestedEx1{ static int i = 5; public static void getI(){ System.out.println(i+1); public void getData(){ System.out.println(i++); ผลลัพธ์ที่ได้ 5 11 10 จะสังเกตุเห็นว่า i มีค่าเพิ่มขึ้น

14 interface class ผลลัพธ์ที่ได้ i = 2, i = 3,j = 2, i = 4, i = 5,j = 2,
static variable ผลลัพธ์ที่ได้ i = 2, i = 3,j = 2, i = 4, i = 5,j = 2, i = 6, i = 7,j = 2, i = 8, i = 9,j = 2, i = 10, i = 11,j = 2, สังเกตุเห็นค่า i กับ j จะเห็นว่าค่า i เป็น static จะเพิ่มขึ้นทุกครั้ง แต่ j ไม่ถูกเพิ่ม เนื่องจากมีการ new Ex2() ใหม่ทุกครั้งในลูป class Ex2 { static int i = 1; int j = 1; public static void main(String[] args) { for (int k = 0; k <5 ; k++) { incre1(); new Ex2().incre2(); } public static void incre1(){ System.out.println("i = "+ ++i +","); System.out.print("j = "+ ++j +","); public void incre2(){ System.out.print("i = "+ ++i +","); System.out.println("j = "+ ++j +",");

15 interface class final ? เป็น modifier ชนิดหนึ่ง
นำหน้า class และ method ได้ นำหน้า primitive data type (int double float String …) สามารถนำ static มาไว้หน้า final ได้ เมื่อมีการประกาศ final แล้วต้องมีการกำหนดค่าลงไปในกรณี variable ค่าของ final variable จะไม่สามารถเปลี่ยนแปลงได้ และค่าของ final method จะไม่สามารถ override method ได้

16 Interface class } Hello public class MainInterface { ตัวอย่าง 2.1
MainInterface.java Interface.java public class MainInterface { public static void main(String[] args) { Interface2 a = new Interface2(); a.greet(); } class Interface2 implements Interface{ public void greet(){ System.out.println(txt); //สร้าง instance class Interface โดยตรงไม่ได้ Interface class Interface { String txt = “Hello”; void greet(); } //Implement class Interface เป็น Interface2 Hello

17 Interface class } Hello public class MainInterface { ตัวอย่าง 2.2
MainInterface.java Interface.java public class MainInterface { public static void main(String[] args) { Interface2 a = new Interface2(); a.greet(); } class Interface2 implements Interface{ public void greet(){ System.out.println(txt); //สร้าง instance class Interface โดยตรงไม่ได้ Interface class Interface { static final String txt = “Hello”; abstract void greet(); } //Implement class Interface เป็น Interface2 Hello

18 Interface class Person Faculty Club Students Teachers subStudent
ตัวอย่าง 2.3 multiple implement Person Faculty Club Students Teachers subStudent subTeacher2 subTeacher1

19 Interface class ตัวอย่าง 2.3 multiple implement
public interface Person { void setName(String n); String getName(); } public interface Faculty { String university = "University of Phayao"; String getFaculty(); } public interface Club { void setClub(String c); String getClub(); } public interface Students extends Faculty, Person,Club { void setID(int id); int getID(); } public interface Teachers extends Faculty, Person{ }

20 Interface class ตัวอย่าง 2.3 multiple implement
public class subStudent implements Students { String name,club; int id; public String getFaculty() { return university; } public void setName(String n) { name = n; public String getName() { return name; public void setClub(String n) { club = n; public String getClub() { return club } public void setID(int id) { this.id = id; public int getID(){ return id;

21 Interface class ตัวอย่าง 2.3 multiple implement
public class subTeacher1 implements Faculty,Person { String name,club; public void setName(String n) { name = n; } public String getName() { return name; public String getFaculty() { return university; public class subTeacher2 implements Teachers { String name,club; public void setName(String n) { name = n; } public String getName() { return name; public String getFaculty() { return university;

22 Interface class ตัวอย่าง 2.3 multiple implement
public class MultiInterface { public static void main(String[] args) { Students s1 = new subStudent(); s1.setName("Bandit"); s1.setID( ); s1.setClub("Badminton Club"); System.out.println(s1.getName()+","+s1.getID()+","+s1.getFaculty()+","+s1.getClub()); subTeacher1 t1 = new subTeacher1(); t1.setName("Nattapon"); System.out.println(t1.getName()+","+t1.getFaculty()); Teachers t2 = new subTeacher2(); t2.setName("Wattanapong"); System.out.println(t2.getName()+","+t2.getFaculty()); } subStudent สืบทอด(inherit) Students Teachers ไม่ได้สืบทอด(non-inherit) subTeachers subTeacher สืบทอด(inherit) subTeachers

23 interface class ผลลัพธ์ที่ได้จากตัวอย่าง 2.3
Bandit, ,University of Phayao,Badminton Club Nattapon,University of Phayao Wattanapong,University of Phayao

24 abstract class vs interface class
Comparing abstract class interface class class name declaration class ClassName interface ClassName inherit extends implements multiple inherit no yes abstract method optional all methods variable - static final

25 abstract class vs interface class
class ต้นแบบ เพื่อให้ class อื่นสืบทอด เช่น class Teacher ถูกสร้างเพื่อเป็นแม่แบบ สำหรับ object อื่นๆ ที่เป็นครู interface class class ลูกที่สืบทอด เลือกที่จะสืบทอดหลายๆ คุณสมบัติจากคลาสต้นแบบ เช่น student สืบทอด คุณสมบัติ university, club, library, course เป็นต้น

26 Exercise คิดโครงสร้างของระบบที่มีการใช้งาน interface class
เขียนโปรแกรมแสดงผลการใช้งาน


ดาวน์โหลด ppt chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส

งานนำเสนอที่คล้ายกัน


Ads by Google