ความสัมพันธ์แบบ IS-A
IS-A เป็นวิธีการพูด − วัตถุนี้เป็นประเภทของวัตถุนั้น ให้เราดูว่าคีย์เวิร์ดขยายนั้นใช้เพื่อให้บรรลุการสืบทอดอย่างไร
public class Animal { } public class Mammal extends Animal { } public class Reptile extends Animal { } public class Dog extends Mammal { }
ทีนี้ ถ้าเราพิจารณาความสัมพันธ์แบบ IS-A เราสามารถพูดได้ว่า −
- สัตว์เลี้ยงลูกด้วยนมคือสัตว์
- สัตว์เลื้อยคลาน IS-A สัตว์
- สุนัขคือสัตว์เลี้ยงลูกด้วยนม
- ดังนั้น:สุนัขก็คือสัตว์เช่นกัน
ด้วยการใช้คีย์เวิร์ดขยาย คลาสย่อยจะสามารถสืบทอดคุณสมบัติทั้งหมดของซูเปอร์คลาส ยกเว้นคุณสมบัติส่วนตัวของซูเปอร์คลาส
เรารับรองได้ว่าสัตว์เลี้ยงลูกด้วยนมเป็นสัตว์จริงๆ ด้วยการใช้ตัวดำเนินการอินสแตนซ์
ตัวอย่าง
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
ความสัมพันธ์เหล่านี้ขึ้นอยู่กับการใช้งานเป็นหลัก สิ่งนี้กำหนดว่าคลาสบางคลาสมีบางสิ่งหรือไม่ ความสัมพันธ์นี้ช่วยลดความซ้ำซ้อนของโค้ดและจุดบกพร่อง
มาดูตัวอย่างกัน −
ตัวอย่าง
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 จะทำงานด้วยตัวเองหรือขอให้ชั้นเรียนอื่นดำเนินการ