java - สรุปรวมๆเรื่อง inheritance


การสอบทอดคลาสทำได้โดยใช้ คีย์เวิร์ด : 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 วิธีคือ
  1. Implementation       (IS-A relationship)
  2. 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

ไม่มีความคิดเห็น:

แสดงความคิดเห็น