ความสัมพันธ์แบบ 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 จะทำงานด้วยตัวเองหรือขอให้ชั้นเรียนอื่นดำเนินการ