Computer >> คอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Java

การสืบทอด (is-a) v / s องค์ประกอบ (has-a) ความสัมพันธ์ใน Java


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