我可以说类House HAS-A类动物,即使它没有明确声明,只能通过继承看到吗?
public class Animal {}
public class Dog extends Animal {}
public class House {
private Dog inhabitant = new Dog();
}
答案 0 :(得分:5)
所以,是的,你的家有一个动物。
答案 1 :(得分:5)
是关系用继承表示,有关系用聚合表示。继承和聚合都允许您将子对象放在新类中。
简单示例:
聚合:当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)在使用继承时会为您做很多工作,但在使用组合时也可以获得继承功能。
答案 5 :(得分:0)
我会说是的,因为Animal
是Dog
答案 6 :(得分:0)
是的,因为 House class HAS-A Dog 和 Dog IS-A(扩展) 动物强> .....
答案 7 :(得分:0)
Is-A表示它使用extends或implements关键字引用继承或实现。
Has-A表示一个类的实例“具有”对另一个类的实例或同一个类的另一个实例的引用,而不使用任何关键字。