继承与HAS-A的关系

时间:2014-01-02 09:49:25

标签: java oop theory

我可以说类House HAS-A类动物,即使它没有明确声明,只能通过继承看到吗?

public class Animal {}

public class Dog extends Animal {}

public class House {
    private Dog inhabitant = new Dog();
}

8 个答案:

答案 0 :(得分:5)

  1. 你的班级“House”有一只狗。
  2. 每只狗都是动物。
  3.   

    所以,是的,你的家有一个动物。

答案 1 :(得分:5)

关系用继承表示,关系用聚合表示。继承和聚合都允许您将子对象放在新类中。

简单示例:

enter image description here

聚合:当House有狗/动物时使用,狗/动物可以在没有House的情况下使用。

答案 2 :(得分:2)

这更像是一个关于语义的问题,因为狗是一个动物,所以说House有动物是没有错的

但内部的参考'居民'只能指向Dog实例。所以,最好说House有一只狗。它将与Law of Demeter更加一致。

答案 3 :(得分:1)

你不能说班级HAS-A类动物。你可以说类House的实例有一个Animal(或Dog)类的实例。

答案 4 :(得分:1)

面向对象编程语言的一个优点是代码重用。我们可以通过实施继承(IS-A关系) aggregation (HAS-A relationship) 来实现代码重用。虽然编译器和Java虚拟机(JVM)在使用继承时会为您做很多工作,但在使用组合时也可以获得继承功能。

阅读Difference between IS-A and HAS-A relationships

答案 5 :(得分:0)

我会说是的,因为AnimalDog

的多态

答案 6 :(得分:0)

  

是的,因为 House class HAS-A Dog Dog IS-A(扩展)   动物 .....

答案 7 :(得分:0)

Is-A表示它使用extends或implements关键字引用继承或实现。

Has-A表示一个类的实例“具有”对另一个类的实例或同一个类的另一个实例的引用,而不使用任何关键字。