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

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

Class Inheritance and Interfaces.

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


งานนำเสนอเรื่อง: "Class Inheritance and Interfaces."— ใบสำเนางานนำเสนอ:

1 Class Inheritance and Interfaces

2 การสืบทอด Inheritance เป็นการสร้าง class ใหม่จาก class ที่มีอยู่แล้ว
เป็นแนวคิดที่สำคัญและทำให้โปรแกรมมีขีดความสามารถสูง ทุก class ที่กำหนดในจาวา จะสืบทอดจาก class ที่มีอยู่แล้ว การสืบทอด class อาจเป็นแบบ explicit หรือ implicit

3 Superclasses and Subclasses
class B สืบทอดมาจาก class A Superclass : class A Subclass : class B subclass สืบทอดมาจาก superclass สามารถสร้าง data (attribute) และ method ใหม่ได้ ทำงานได้มากกว่า superclass superclass = parent class = base class subclass = child class = extended class = derived class

4 data และ method จาก Circle class
radius: double +getRadius(): double +setRadius(radius: double): void +findArea(): double Cylinder length: double +getLength(): double +setLength(length: double): void +findVolume(): double Cylinder class สืบทอด data และ method จาก Circle class และ Cylinder class ยังมี data และ method ของตนเองด้วย

5 data และ method จาก Computer class
manufacturer: String Processor: String ramSize: int diskSize: int +getRamSize(): int +getDiskSize(): int +toString(): String Laptop screenSize: double weight: double +getWeight() : double +getScreenSize():double Laptop class สืบทอด data และ method จาก Computer class และ Laptop class ยังมี data และ method ของตนเองด้วย

6 Keyword super super ใช้อ้างถึง
super class ของ class ที่ปรากฏคำว่า super สามารถใช้ได้ 2 แบบ เรียก superclass constructor เรียก superclass method

7 การเรียก superclass method
หรือ super(parameters); super() เรียก default constructor ของ superclass super(parameters) เรียก superclass constructor ที่มี parameters ที่ตรงกัน

8 จะต้องปรากฏที่บรรทัดแรกของ subclass constructor
super() หรือ super(parameters) จะต้องปรากฏที่บรรทัดแรกของ subclass constructor ซึ่งเป็นวิธีเดียวที่จะเรียก superclass constructor ปกติจะละ super() เพราะ subclass constructor จะเรียก super() อยู่แล้ว ถ้าไม่มี explicited invoke

9 constructor ถูกใช้เพื่อสร้าง instance ของ class
การสืบทอด properties(data หรือ attribute) และ methods คือ subclass ไม่สามารถสืบทอด constructor ของ superclass โดย constructor ของ subclass สามารถเรียกใช้ constructor ของ superclass โดยใช้ คำหลัก super ถ้าไม่มีการใช้คำหลัก super ใน subclass จะทำให้ default constructor ของ superclass ถูกเรียกโดยอัตโนมัติ

10 default constructor ของ superclass
ถูกเรียกโดยอัตโนมัติ

11 x default constructor เรียก y default constructor

12 ถ้า constructor ของ superclass ไม่ใช่ default constructor
subclass จะไม่สามารถใช้ constructor ของ superclass class x ไม่ได้กำหนด constructor ดังนั้น จึงใช้ default constructor default constructor ของ x จะเรียก default constructor ของ y โดยอัตโนมัติ แต่ไม่พบ ดังนั้นจึง compile ไม่ได้

13

14 เรียก default superclass constructor
เรียก superclass constructor Circle(r)

15

16 การเรียก Superclass Methods
คำหลัก super นอกจากใช้เพื่ออ้างถึง constructor ของ superclass แล้วยังสามารถใช้เพื่ออ้างถึง method ได้ super.method(parameters) class cylinder{ double findVolume() { return super.findArea() * length; } ในกรณีนี้ไม่จำเป็นต้องมี super เพราะ findArea() อยู่ใน Circle class และถูกสืบทอดโดย Cylinder class

17 Overriding Methods subclass ที่สืบทอด method จาก superclass
บางครั้ง อาจจำเป็นต้องแก้ไขเปลี่ยนแปลง method ที่กำหนดใน super class method overriding คือ method ที่มีอยู่ใน superclass แล้วนำมาปรับปรุงแก้ไขเพิ่มเติมใน subclass โดย method signature ไม่เปลี่ยนแปลง

18 กรณีนี้จำเป็นต้องใช้คำหลัก super
Overriding method กรณีนี้จำเป็นต้องใช้คำหลัก super

19

20 toString method การเรียก object.toString() จะคืนค่า string โดย default จะคืนค่า string ที่ประกอบด้วย ชื่อ class ของ object @ ที่อยู่ของ object

21 Overriding method Java compiler แปล CylinderA ใน println() ให้เป็น string ด้วยการเรียก toString() โดยอัตโนมัติ

22 protected modifier สามารถใช้กับ data และ method ใน class
protected data และ protected method ในpublic class สามารถถูก access โดย class ต่างๆใน package เดียวกัน subclass ซึ่งอาจอยู่ใน package เดียวกัน หรือ package อื่น

23 package p1 package p2 public class C1 public class C2 extends C1 protected int x x สามารถถูกอ่านได้ public class C3 public class C4 C1 ob; ob.x สามารถถูกอ่านและแก้ไข C1 ob; ob.x ไม่สามารถถูกอ่านและแก้ไขได้

24 การใช้ modifiers กับความสามารถมองเห็นได้
- private - protected - public modifier เหล่านี้ จะเพิ่มความสามารถของ class หรือ class member ในการมองเห็น หรือเข้าถึงตามลำดับต่อไปนี้ private, ไม่มี modifier, protected, public

25 private ซ่อนสมาชิกของ class โดยสมบูรณ์ ไม่สามารถเข้าถึงจากภายนอก class ไม่มี modifiers อนุญาตให้เข้าถึงสมาชิกของ class ได้เฉพาะ สมาชิกจากทุก class ภายใน package เดียวกัน เรียกว่า package-private protected อนุญาตสมาชิกของ class ใน package เดียวกัน และ subclass จาก package อื่น เข้าถึงสมาชิกของ class public อนุญาตสมาชิกจากทุก class เข้าถึงสมาชิกของ class ได้

26 subclass สามารถ - override protected method ใน superclass เปลี่ยนความสามารถในการมองเห็น method ดังกล่าว จาก protected เป็น public subclass ไม่สามารถ เปลี่ยนความสามารถในการมองเห็นให้น้อยลงได้

27 final modifier สามารถใช้ได้กับ การประกาศค่าคงที่
ตัวอย่าง final int VAT = 0.07; final double PI = ; การกำหนดให้ class ไม่สามารถเป็น parent class ตัวอย่าง final class public final class Math extends Object public final class String extends Object public final class StringBuffer extends Object

28 Abstract Classes เป็น class ที่
- มีลักษณะทั่วไปและมีการกำหนดคุณสมบัติน้อยที่สุด ถูกออกแบบเพื่อเป็นต้นแบบของ subclass - ไม่มี instance หรือ object Abstract Method มีแต่ method signature การใช้งานอยู่ที่ subclass

29 Object Cylinders -length: double +getLength(): double
+setLength(length:double): void +findVolumn(): double Object Geometric -color: String -filled: boolean +getColor() : String +setColor(String color): void +isFilled(): boolean +setFilled(boolean filled): void +findArea(): double +findPerimeter(): double Circles -radius: double +getRadius():double +setRadius(radius:double): void Rectangle -width: double -length: double +getWidth(): double +setWidth(width:double): void +getLength(): double +setLength(length: double): void

30

31 Geometric

32 Geometric

33

34

35

36

37

38 public String toString()
method toString ได้ถูกกำหนดไว้ใน Object class และได้มีการปรับปรุงใน Circle, Rectangle, และ Cylinder class public String toString() abstract methods findArea และ findPerimeter ได้กำหนดไว้ใน Geometric class และได้นำมาใช้ใน Circle และ Rectangle class

39 abstract method ไม่สามารถอยู่ใน nonabstract class
ถ้า subclass ของ abstract superclass ไม่ได้ใช้ทุก abstract methods จะต้องประกาศให้ subclass เป็น abstract หรือ อีกนัยหนึ่ง nonabstract subclass ที่สืบทอดมาจาก abstract class จะต้องใช้ทุก abstract method แม้ว่าใน subclass ไม่มีการใช้งาน

40 abstract class ไม่สามารถสร้างตัวอย่างหรือวัตถุ แต่อาจจะมี constructor ที่ถูกเรียกใช้โดย constructor ของ subclass ตัวอย่าง constructor ของ Geometric ถูกเรียกใช้โดย Circles class

41 class ที่ประกอบด้วย abstract method ต้องเป็น abstract
abstract class อาจไม่มี abstract method subclass สามารถเป็น abstract ได้ แม้ว่า superclass ไม่ได้เป็น abstract ตัวอย่าง Object class เป็น concrete class แต่ Geometric class ซึ่งเป็น subclass สามารถเป็น abstract ได้

42 subclass สามารถ override
method จาก superclass ให้เป็น abstract และ subclass ก็ต้องกลายเป็น abstract ด้วย abstract class ไม่สามารถสร้าง object ได้ แต่สามารถใช้เป็นประเภทข้อมูลได้ ตัวอย่าง Geometric[] geo = new Geometric[10]

43 Polymorphism object ของ subclass สามารถเป็น object ของ superclass ได้ในขณะเดียวกัน ตัวอย่าง ถ้า method มีพารามิเตอร์ประเภท Geometric จะสามารถเรียกใช้ method กับ วัตถุประเภท Circle ได้ Circle object เป็นได้ทั้งวัตถุของ Circle และ วัตถุของ Geometric คุณลักษณะแบบนี้เรียกว่า polymorphism

44 Dynamic Binding method ที่กำหนดไว้ใน superclass
สามารถนำมา override ใน subclass ได้ เมื่อมีการเรียกใช้ method ในช่วงของ runtime, Java Virtual Machine จะค้นหา method ที่จะกระทำการ เรียก ความสามารถนี้ว่า Dynamic Binding

45 การทำงานของ Dynamic binding
สมมติ วัตถุ o เป็น ตัวอย่าง ของ class C1, C2, ..., Cn-1 และ Cn โดย C1 เป็น subclass ของ C2, C2 เป็น subclass ของ C3, ... Cn-1 เป็น subclass ของ Cn ดังนั้น Cn เป็น class ทั่วไปที่สุด C1 เป็น class พิเศษที่สุด ในจาวา Cn หมายถึง class Object ถ้าวัตถุ o เรียก method p JVM จะค้นหา method p ใน c1, c2, ... , cn-1 ตามลำดับ จนพบ เมื่อพบที่ class ใด การค้นหาจะหยุด และ จะมีทำงานตาม method p ที่พบในครั้งแรก

46

47 Polymorphism ยอมให้ใช้ method กับ วัตถุ ในรูปแบบหลากหลาย
implicit casting Circles Rectangle Polymorphism ยอมให้ใช้ method กับ วัตถุ ในรูปแบบหลากหลาย เรียกว่า generic programming

48 ในขณะที่ compile compiler จะค้นหา matching method ตาม ประเภท จำนวน และลำดับของพารามิเตอร์ (method signature) ในช่วง runtime method อาจถูกใช้ในหลาย subclass JVM จะจัดการรวม method (binding method) ตามประเภทการเรียกใช้

49 Casting objects and the instanceof Operator
อีกประเภทหนึ่งตามลำดับชั้นของการสืบทอด Geometric geoOb1 = new Circles(5); ให้เอาวัตถุวงกลมไปเก็บไว้ในตัวแปรประเภท Geometric Circles c = geoOb1 ให้เอาวัตถุ geoOb1 ไปเก็บไว้ใน c ซึ่งเป็นตัวแปรประเภท Circles Circles object เป็นตัวอย่างของ Geometric เสมอ แต่ Geometric ไม่จำเป็นต้องเป็นตัวอย่างของ Circles

50 แม้ว่า geoOb1 จะเป็น วัตถุประเภท Circles จริงๆ
แต่ compiler จะไม่สามารถทราบได้ ดังนั้น เพื่อบอกให้ compiler ทราบว่า geoOb1 เป็นประเภท Circles จึงต้องใช้ explicit cast ดังนี้ Circles c = (Circles) geoOb1 การ cast จะสำเร็จ ถ้าวัตถุของ superclass เป็นตัวอย่างของ subclass มิฉะนั้น จะเกิด runtime exception

51


ดาวน์โหลด ppt Class Inheritance and Interfaces.

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


Ads by Google