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

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

Inheritance การสืบทอดคลาส

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


งานนำเสนอเรื่อง: "Inheritance การสืบทอดคลาส"— ใบสำเนางานนำเสนอ:

1 Inheritance การสืบทอดคลาส

2 การนำ Code กลับนำมาใช้ใหม่
การนำ Code กลับนำมาใช้ใหม่ คือ การใช้ Code ที่มีอยู่แล้วมาสร้างคลาสใหม่ซึ่งอาจจะเป็นการสืบทอดจากคลาสหลัก (Inheritance) ที่ได้นำมาเป็นส่วนประกอบคลาสใหม่ที่สร้าง การสืบทอดจะเป็นการนำ Code เดิมกลับมาใช้อีกครั้ง โดยที่เราไม่ต้องเขียนใหม่ ทำให้ประหยัดเวลาและถ้า Code นั้นได้มีการตรวจสอบข้อบกพร่องอย่างดีแล้วยิ่งทำให้ช่วยลดเวลาในการตรวจสอบ Code อีกครั้ง

3 การนำคลาสกลับมาใช้อาจจำแนกได้เป็น 4 วิธี คือ
1. นำโปรแกรมที่เขียนเก็บไว้มาใช้ 2. เขียนใหม่จากข้อมูลที่มีอยู่ 3. นำคลาสมาใช้ในลักษณะ Composition 4. นำคลาสกลับมาใช้ภายใต้การสืบทอดคุณสมบัติ (Inheritance)

4 การสืบทอดคุณสมบัติ (Inheritance)
คือ การใช้คลาสที่มีอยู่แล้วมาสร้างเป็นคลาสใหม่ (คลาสย่อย) โดยการสืบทอด วิธีการนี้ เราสามารถใช้คุณสมบัติต่างๆของคลาสเดิม เช่น ตัวแปร เมธอด คอนสตักเตอร์ หรืออื่นๆ ทั้งหมดที่คลาสเดิมมีอยู่แล้วได้ โดยไม่ต้องมีการแก้ไขใดๆ รวมทั้งยังสามารถเพิ่มเติมคุณสมบัติใหม่ๆ ที่คลาสเดิมไม่มีได้อีกด้วย เราเรียกคลาสที่มีอยู่ว่าคลาสหลัก (Superclass) และคลาสใหม่ที่สืบทอดว่า คลาสสืบทอด หรือ คลาสลูก (Subclass)

5 การถ่ายทอดแบบลำดับชั้น (Hierarchical Class)
- การสืบทอดไม่ได้จำกัดเพียงระหว่าง superclass และ subclass เท่านั้น sub class สามารถเป็น superclass ของ class อีกหนึ่งได้ การเขียนแผนภาพแสดงความสัมพันธ์ นิยมเขียนเป็นแผนผังแบบต้นไม้ (Tree)

6 แผนผังแบบต้นไม้ (Tree)
Class สัตว์ Class สัตว์ปีก Class สัตว์เลื้อยคลาน Class สัตว์บก Class สัตว์น้ำ

7

8 การ Inheritance สามารถทำได้ 2 ลักษณะ คือ
1. Single Inheritance คือ การที่ subclass ได้รับการถ่ายทอดคุณสมบัติมาจาก Superclass เพียงคลาสเดียวClass A และ Class B Class A Class B

9 2. Multiple Inheritance คือการที่ subclass ได้รับการถ่ายทอดคุณสมบัติต่างๆ มาจาก Superclass มากกว่า 1 คลาส Class A Class B Class C

10 หลักในการสร้างการสืบทอด
- สร้าง class หลักขึ้นมา 1 class แล้วกำหนดให้มีคุณสมบัติต่างๆ ซึ่งเป็นคุณสมบัติโดยรวม ที่ class อื่นๆ จำเป็นต้องมี - จากนั้นจึงสร้าง class คลาสอื่นขึ้นมา เพื่อรับการถ่ายทอดคุณสมบัติทั้งหมดจาก class หลักมาโดยอัตโนมัติ โดยไม่ต้องสร้างขึ้นใหม่ - สามารถสร้างคุณสมบัติอื่นๆ นอกเหนือจาก class หลักขึ้นมาเองได้

11 การสร้าง Superclass และ Subclass
Superclass จะสร้างเหมือนกับการสร้าง Class ทั่วไป แต่การสร้าง Subclass จะระบุคำว่า “extends” ร่วมด้วยเพื่อให้ทราบว่า Subclass จะใช้คุณสมบัติจาก Superclass ชื่ออะไร รูปแบบดังนี้ subclass_name คือ ชื่อของคลาสใหม่หรือคลาสลูก superclass_name คือ ชื่อของคลาสที่สืบทอดหรือคลาสแม่ class subclass_name extends ชื่อ superclass_name

12 การสร้าง Superclass และ Subclass (ต่อ)
class A { int x ; } class B extends A { int y ; } ทำการสร้าง instance จากคลาสทั้ง 2 A a = new A() ; B b= new B() ;

13 Example Superclass 1 A B class A{ void printA(){
System.out.println("A"); } class B extends A{ void printB() { System.out.println("B"); public class inheritance{ public static void main(String[] args) { A m = new A(); B n = new B(); m.printA(); n.printA(); n.printB(); } A B

14 Example Superclass 2 class A{ int x = 1; public class inheritance1{ }
class B extends A{ int y = 3; class C extends B{ int z = 4; public class inheritance1{ public static void main(String[] args) { A o = new A(); System.out.println (0.x); B p = new B(); System.out.println (p.x+ “,”+p.y); C m = new C(); System.out.println (m.x+m.y+m.z); } 1 1,3 8

15 การเข้าถึงด้วย access modifier
การป้องกันการเรียกใช้ภายใน Superclass การเข้าถึงด้วย access modifier public ระบุที่ method หรือ variable แสดงว่า class ใดๆ สามารถ access ได้ private ระบุที่ method หรือ variable สามารถใช้ access ได้เพียงใน class นั้นเท่านั้น subclass ไม่สามารถ access ได้ protected method หรือ variable สามารถ access เมื่อเป็นสมาชิกของ class หรือ subclass

16 การป้องกันการเรียกใช้ภายใน Superclass (ต่อ)

17 Example 1 class A{ protected int x = 10; private int w = 5; }
class B extends A{ int y; void Mul() { y = x*w; System.out.println (y); public class Test{ public static void main(String[] args) { B m = new B(); m.Mul(); } Compile Error / private

18 การใช้ keyword super ใช้สำหรับการทำงานใน Subclass ซึ่งมีประโยชน์ 2 ประการ คือ 1. เพื่อเรียกใช้สมาชิกของ Subclass และ Superclass ที่ใช้ชื่อสมาชิกเดียวกัน รูปแบบ super.member เช่น super.x=x; super.r=r;

19 การใช้ super เรียกสมาชิกของ Superclass
public class super1{ public static void main(String[] args) { B m = new B(5,8); m.show(); } class A{ int x; } class B extends A{ int x; B(int a,int b) { super.x = a; x = b; } void show(){ System.out.println("x in superclass : "+super.x); System.out.println("x in subclass : "+x); x in superclass : 5 x in subclass : 8

20 การใช้ keyword super (ต่อ)
2. Subclass สามารถเรียกใช้ Constructor Method ของ Superclass โดยไม่จำเป็นต้องสร้าง Constructor ของตนเองขึ้นมาใหม่ (Constructor จะไม่ถูกสืบทอดจากการ inherit ด้วย extends) รูปแบบ super(argument) เช่น super(r)

21 การใช้ super เรียก Constructorของ Superclass1
class A{ A(String s){System.out.println(s);} } class B extends A{ B() { super("Hello"); System.out.println("Good Boy"); public class super_constru{ public static void main(String[] args) { B m = new B(); Hello Good Boy

22 การใช้ super เรียก Constructorของ Superclass2
class A{ int a,b; A(int a, int b){ this.a = a; this.b = b; } class B extends A{ int c; B(int c) { super(0,0); this.c = c; public class super_constru2{ public static void main(String[] args) { B m = new B(5); System.out.println("a = "+m.a+ " b = " +m.b " c = "+m.c); } a=0 b=0 c=5

23 Inheritance Assessments
Refer a difference variable from class C x this.x super.x ((B)this).x ((A)this).x super.super.x class A { int x; .. } class B extends A { class C extends B { x in class C x in class C x in class B x in class B Inheritance Assessments Define A class as super-class which has one element named “X”. B Class extends A Class and also defines an element named “X”. C Class extends B Class and also defines an element named “X”. We can refer to all hidden variable from Class C as following “x” means element “x” in C class “this.X” means element “x” in C class “super.x” means element “x” in B class “((B)this).x means element “x” in B class , Note : (B) refers to object casting from “C” class to “B” class “((A)this).x means element “x” in A class , Note : (A) refers to object casting from “C” class to “A” class “super.super.x” means “x” element in A class How this happen? x in class A x in class A

24 Inheritance Solutions
B ((A)this).x B A [x] ((B)this).x Inheritance Solution Once we are instantiate an object from C class, An internal implementation of C class in memory space maintains the class hierarchy which a super-class inside a sub-class as above picture. A Class is inside B class and B class is inside C class. Therefore, we can do object casting easily. Object casting helps us to scope out the object which one we want to refer to. this.x C [x] [x] Class Diagram Memory Space

25 Shadowing ถ้าเรากำหนด data member ในคลาสลูกมีชื่อเหมือนกับ data member ในคลาสแม่ ชื่อของลูกจะบัง(shadow)ชื่อในคลาสแม่ class A {int x = 1;} class B extends A {float x = 2.0f;} class shadowing { public static void main(String args[]) { B b = new B(); A c = new A(); System.out.println(b.x); System.out.println(c.x); } 2.0 1

26 แบบฝึกหัด Point2D x,y : int Point2D(x:int,y:int) Point2D(x:int)
z : int Point3D(x:int,y:int,z:int) Point3D(z:int) Point3D() Test2D3D Main():void

27 Class Point2D - Point2D(x:int,y:int) ใช้ set ค่า x y - Point2D(x:int) เรียก constructor Point2D(x:int,y:int) มาใช้ กำหนดค่า เป็น (x,0); - Point2D() เรียก constructor Point2D(x:int,y:int) มาใช้ กำหนดค่าเป็น (0,0)

28 Class Point3D - Extends จาก Point2D - Point3D(x:int,y:int,z:int) ใช้ set ค่า x y z (x,y เรียกใช้ constructor จาก Point2D (x:int,y:int) - Point3D(z:int) ใช้ set ค่า z และเรียก ใช้ constructor จาก Point2D(x:int,y:int) กำหนดค่า เป็น (0,0); - Point3D() เรียก constructor Point3D(x:int,y:int,z:int) มาใช้ กำหนดค่าเป็น (0,0,0)

29 ผล RUN x = 0 y = 0 x = 5 y = 0 x = 5 y = 10 x = 0 y = 0 z = 0


ดาวน์โหลด ppt Inheritance การสืบทอดคลาส

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


Ads by Google