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

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

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

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


งานนำเสนอเรื่อง: "Chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส WATTANAPONG SUTTAPAK, SE, ICT, UP, Thailand."— ใบสำเนางานนำเสนอ:

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

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

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

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

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

6 Abstract class ตัวอย่าง 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(); } class Abstract { void printTxt(){ System.out.println("This is text."); }

7 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"); } Abstract class MainAbstract.java ตัวอย่าง 1.1 abstract class Abstract { void printTxt() { System.out.println("This is text."); } abstract void greet(); } Abstract.java Hello // สร้าง instance class Abtract โดยตรงไม่ได้ //extend class Abtract เป็น Abstract2

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

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

10 interface ExIm1 {} ตัวอย่าง interface class ในรูปแบบต่างๆ public interface ExIm1 {} interface ExIm1 { void printTxt(); } interface ExIm1 { int myVar = 1; } interface ExIm1 { int myVar = 1; void printTxt(); } interface ExIm1 { void printTxt(){} } interface ExIm1 { int myVar; } interface ExIm1 { abstract void printTxt(); } interface ExIm1 { static final int myVar = 1; } interface ExIm1 { void printTxt(){} void greeting(); }

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{ public static class StaticNestedClass{ } public class InnerClass{ } 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(); } จะเห็นว่า OtherClass สามารถ เรียกใช้ StaticNestedClass ผ่าน OuterClass ได้ โดยตรง ในขณะที่ OtherClass ไม่สามารถ เรียกใช้ InnerClass ผ่าน OuterClass ได้โดยตรง โดย ต้องทำการสร้าง instance ของ OuterClass ก่อน

13 interface class  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(); System.out.println(nestedEx1.i); } class nestedEx1{ static int i = 5; public static void getI(){ System.out.println(i+1); } public void getData(){ System.out.println(i++); } ผลลัพธ์ที่ได้ จะสังเกตุเห็นว่า i มีค่า เพิ่มขึ้น

14 interface class  static variable 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 +","); } ผลลัพธ์ที่ได้ 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() ใหม่ทุก ครั้งในลูป

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 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); } Interface class MainInterface.java ตัวอย่าง 2.1 Interface class Interface { String txt = “Hello”; void greet(); } Interface.java Hello // สร้าง instance class Interface โดยตรงไม่ได้ //Implement class Interface เป็น Interface2

17 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); } Interface class MainInterface.java ตัวอย่าง 2.2 Interface class Interface { static final String txt = “Hello”; abstract void greet(); } Interface.java Hello // สร้าง instance class Interface โดยตรงไม่ได้ //Implement class Interface เป็น Interface2

18 Interface class ตัวอย่าง 2.3 multiple implement Person Faculty Club Students Teachers subStudentsubTeacher2 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 subTeacher สืบทอด (inherit) subTeachers Teachers ไม่ได้สืบทอด (non-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 Comparingabstract classinterface class class name declarationclass ClassNameinterface ClassName inheritextendsimplements multiple inheritnoyes abstract methodoptionalall methods variable-static final

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

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


ดาวน์โหลด ppt Chapter5 - คลาสนามธรรม - อินเตอร์เฟสคลาส WATTANAPONG SUTTAPAK, SE, ICT, UP, Thailand.

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


Ads by Google