ความสัมพันธ์ IS-A
IS-A เป็นวิธีการพูดว่า: ออบเจ็กต์นี้เป็นประเภทหนึ่งของออบเจ็กต์นั้น ลองดูว่าคีย์เวิร์ด extends ใช้เพื่อให้ได้การสืบทอดอย่างไร
public class Animal { } public class Mammal extends Animal { } public class Reptile extends Animal { } public class Dog extends Mammal { }ตอนนี้ หากเราพิจารณาความสัมพันธ์ IS-A เราสามารถพูดได้ว่า:
- Mammal IS-A Animal
- Reptile IS-A Animal
- Dog IS-A Mammal
- ดังนั้น: Dog IS-A Animal ด้วย
ด้วยการใช้คีย์เวิร์ด extends คลาสย่อยจะสามารถสืบทอดคุณสมบัติทั้งหมดของซุปเปอร์คลาสได้ ยกเว้นคุณสมบัติ private ของซุปเปอร์คลาส
เราสามารถรับรองได้ว่า Mammal เป็น Animal จริงๆ ด้วยการใช้ตัวดำเนินการ instanceof
ตัวอย่าง
class Animal { } class Mammal extends Animal { } class Reptile extends Animal { } public class Dog extends Mammal { public static void main(String args[]) { Animal a = new Animal(); Mammal m = new Mammal(); Dog d = new Dog(); System.out.println(m instanceof Animal); System.out.println(d instanceof Mammal); System.out.println(d instanceof Animal); } }นี่จะผลิตผลลัพธ์ดังนี้:
ผลลัพธ์
true true true
ความสัมพันธ์ HAS-A
ความสัมพันธ์เหล่านี้หลักจากการใช้งาน นี่กำหนดว่าคลาสหนึ่ง HAS-A สิ่งหนึ่ง ความสัมพันธ์นี้ช่วยลดการทำซ้ำของโค้ดและบั๊ก
ลองดูตัวอย่าง:
ตัวอย่าง
public class Vehicle{ } public class Speed{ } public class Van extends Vehicle { private Speed sp; }นี่แสดงว่าคลาส Van HAS-A Speed ด้วยการมีคลาสแยกสำหรับ Speed เราไม่ต้องวางโค้ดทั้งหมดที่เป็นของ Speed ไว้ในคลาส Van ทำให้สามารถนำคลาส Speed ไปใช้ซ้ำในหลายแอปพลิเคชันได้
ในคุณสมบัติเชิงวัตถุ ผู้ใช้ไม่จำเป็นต้องกังวลว่าออบเจ็กต์ไหนทำงานจริง เพื่อให้บรรลุสิ่งนี้ คลาส Van ซ่อนรายละเอียดการนำไปใช้งานจากผู้ใช้ของคลาส Van ดังนั้นพื้นฐานแล้ว สิ่งที่เกิดขึ้นคือ ผู้ใช้จะขอให้คลาส Van ทำการกระทำบางอย่าง และคลาส Van จะทำงานด้วยตัวเอง หรือขอให้คลาสอื่นทำการกระทำนั้น