Computer >> Máy Tính >  >> Lập trình >> Java

mối quan hệ kế thừa (is-a) v / s thành phần (has-a) trong Java

Mối quan hệ IS-A

IS-A là một cách nói - Đối tượng này là một kiểu của đối tượng kia. Hãy để chúng tôi xem cách từ khóa mở rộng được sử dụng để đạt được tính kế thừa.

public class Animal {
}
public class Mammal extends Animal {
}
public class Reptile extends Animal {
}
public class Dog extends Mammal {
}

Bây giờ, nếu chúng ta xem xét mối quan hệ IS-A, chúng ta có thể nói -

  • Mammal IS-A Animal
  • Loài bò sát IS-A Animal
  • Chó LÀ-Động vật có vú
  • Do đó:Chó cũng là Động vật

Với việc sử dụng từ khóa expand, các lớp con sẽ có thể kế thừa tất cả các thuộc tính của lớp cha ngoại trừ các thuộc tính riêng của lớp cha.

Chúng tôi có thể đảm bảo rằng Động vật có vú thực sự là Động vật với việc sử dụng toán tử cá thể.

Ví dụ

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);
    }
}

Điều này sẽ tạo ra kết quả sau -

Đầu ra

true
true
true

Mối quan hệ CÓ-A

Những mối quan hệ này chủ yếu dựa trên cách sử dụng. Điều này xác định xem một lớp nhất định CÓ-Một điều nhất định. Mối quan hệ này giúp giảm thiểu trùng lặp mã cũng như lỗi.

Hãy xem xét một ví dụ -

Ví dụ

public class Vehicle{ }
public class Speed{ }
public class Van extends Vehicle {
   private Speed sp;  
}

Điều này cho thấy Van HAS-A Speed ​​đẳng cấp. Bằng cách có một lớp riêng biệt cho Tốc độ, chúng tôi không phải đặt toàn bộ mã thuộc về tốc độ bên trong lớp Van, điều này giúp bạn có thể sử dụng lại lớp Tốc độ trong nhiều ứng dụng.

Trong tính năng Hướng đối tượng, người dùng không cần bận tâm về đối tượng nào đang thực hiện công việc thực sự. Để đạt được điều này, lớp Van ẩn các chi tiết triển khai với người dùng của lớp Van. Vì vậy, về cơ bản những gì sẽ xảy ra là người dùng sẽ yêu cầu lớp Van thực hiện một hành động nhất định và lớp Van sẽ tự thực hiện công việc đó hoặc yêu cầu một lớp khác thực hiện hành động đó.