การสอบทอดคลาสทำได้โดยใช้ คีย์เวิร์ด : extends
ตัวอย่าง
public class A {}
public class B extends B {}
หมายถึง : คลาส B ทำการสืบทอด Class A
ผลลัพธ์
คลาส B สามารถใช้งาน Fields , Method ของคลาส A ได้
(ยกเว้น method , fields ที่เป็น private)
จากโค้ดด้านบนถ้าคุณลองเปลี่ยน modifier ของ field_a เป็น private
ก็จะเกิด error ในบรรทัดที่ 6 ที่เขียนว่า b.filed_a = 777;
และถ้าคุณเปลี่ยน modifier ของเมธอท test() เป็น private
ก็จะเกิด error ในบรรทัดที่ 7 ที่เขียนว่า b.test();
การออกแบบคลาสควรมีความสัมพันธ์กัน
เช่น
public class Shape{}
public class Circle extends Shape{}
public class Triangle extends Shape{}
อธิบายบายได้ว่า Circle Triangle ต่างก็เป็นรูปทรง (Shape)
Example : Single Inheritance
http://www.tutorialspoint.com/java/java_inheritance.htm |
Execute command
javac Calculation.java
java My_Calculation
output
ผลการบวก : 30
ผลการลบ : 10
ผลการคุณ : 200
อธิบาย
ประกาศตัวแปรแบบ local variable (บรรทัดที่ 25)
new My_Calculation (บรรทัด 27)
เรียกใช้เมธอท addition() ของ SuperClass (บรรทัด 28)
เรียกใช้เมธอท Substraction() ของ SuperClass (บรรทัด 29)
เรียกใช้เมธอท multiplication ของตัวเอง (บรรทัด 30)
- การใช้คีย์เวิร์ด Super
1.) การใช้ super();
เพื่อเรียกใช้ Constructor ของ Superclass (ในบรรทัดที่ 18)
http://www.tutorialspoint.com/java/java_inheritance.htm |
Execute command
javac Superclass.java // Compile Superclass.java Source Code
java Subclass // รัน main class ใน Subclass
output
ค่าของตัวแปร age ใน java Subclass คือ : 24
อธิบาย
มีการ new SubClass ของตัวเองขึ้น (บรรทัดที่ 22)
โดยใน Constructor มีการเรียกใช้ Constructor ของ Superclass และส่งค่า age ไป (บรรทัดที่ 18)
เรียกใช้เมธอท getAge() ของ SuperClass เพื่อแสดงค่าของตัวแปร age ใน SuperClass (บรรทัด 23)
2.) super.variable // เข้าถึง Field ของ Super Class
super.method(); // ใช้งาน Method ของ Super Class
http://www.tutorialspoint.com/java/java_inheritance.htm |
Execute command
javac Super_class.java // Compile Super_class.java Source Code
java Sub_class // รัน main class ใน Sub_class
output
This is the display method of subclass
This is the display method of superclass
value of the variable named num in sub class:10
value of the variable named num in super class:20
อธิบาย
new Sub_class (บรรทัดที่ 31)
เรียกใช้ my_method ของตัวเอง (บรรทัด 32)
new Sub_class ใน method ที่ไม่ใช่ static (บรรทัดที่ 21)
เรียกใช้ method : display ของ Sub_class (บรรทัดที่ 23)
เรียกใช้ method : display ของ Super_class (บรรทัดที่ 24)
เข้าถึง Field ของตัวเอง (บรรทัด 26)
เข้าถึง Field ของ super class (บรรทัด 27)
- การใช้คีย์เวิร์ด : instanceof
เพื่อตรวจสอบว่า Object นั้น extends หรือ implement จากคลาสที่ต้องการตรวจสอบหรือไม่
http://www.tutorialspoint.com/java/java_inheritance.htm |
- การออกแบบคลาส 2 ประเภท
โครงสร้างการเขียนโค้ดเชิง OOP เพื่อให้สามารถนำไป Reuse ใช้ใหม่ในงานอื่นๆ
การออกแบบ Code ให้สามารถ Reuse ใช้ได้ใหม่ในงานอื่นๆ มี 2 วิธีคือ
- Implementation (IS-A relationship)
- object composition (HAS-A relationship)
*ข้อควรจำ - compiler และ java virtual machine (JVM) จะยิ่งทำงานหนักเมื่อมีการใช้ inheritance.
http://www.tutorialspoint.com/java/java_inheritance.htm |
http://www.tutorialspoint.com/java/java_inheritance.htm |
- Inheritance
คือการเขียนคลาสใหม่มาขยายคุณสมบัติจากคลาสเก่าที่มีอยู่
public class B extends A{ }
สิ่งที่ได้คือ
- คลาส B จะสามารถใช้ Fields , method ของคลาส A ได้ทั้งหมด
- เมื่อมีการสืบทอด อาจมีการเปลี่ยน methods เดิมของ superclass ให้มีพฤติกรรมใหม่ เรียกว่า Overriding method
- Type of Inheritance
- Composition
คือการนำ Class อื่นมาเป็นองค์ประกอบของ SuperClass
เช่นนำ มาเป็น Fields ของ Super class
ex1 : เช่น Class Car ประกอบด้วย fields ที่เป็น Object ของคลาส : Wheel , Engine , Window, Door
อธิบายได้ว่า : Van HAS-A Speed.
public class Car{
public Wheel wheel;
public Engine engine;
public Window window;
public Door door;
public Car(){
}
}
ข้อดีคือ คลาส : Wheel , Engine , Window, Door จะสามารถนำไป reuse ใช้งานในคลาสอื่นๆ
ex2 : รถ van เป็น Vehicle (ยานพาหนะ) มีส่วนประกอบคือ Speed
public class Vehicle{}
public class Speed{}
public class Van extends Vehicle{
private Speed sp;
}
ข้อดีคือ : Class Speed จะสามารถนำไป Reuse ใช้งานได้ต่อใน Application อื่นๆ
- Java Library Class website
เพื่อศึกษาจากงานจริง ^^
JNL, JSci , JLAPACK , JEdit , Lucene
- แนะนำบทความต่อไป
ว่าด้วยเรื่อง Composition over Inheritance
http://www.somkiat.cc/prefer-composition-over-inheritance/
ปล.ในเรื่อง JAVA OOP ยังมีอะไรให้น่าหลงไหล
มากกว่า Composition และ Inheritance อาธิเช่น Design Pattern
.... โปรดติดตามตอนต่อไป ....
Ref :
อาจารย์ สมชาย ประสิทธิ์จูตระกูล - วิศกรรมคอมพิวเตอร์จุฬา
http://www.w3resource.com/java-tutorial/inheritance-composition-relationship.php
http://www.tutorialspoint.com/java/java_inheritance.htm
ไม่มีความคิดเห็น:
แสดงความคิดเห็น