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

ความสัมพันธ์การสืบทอด (is-a) เทียบกับการประกอบ (has-a) ใน Java

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