我是JAVA的新手,刚刚开始学习IS-A和HAS-A关系但却无法获得太多。我想想象一下这两者是如何不同的,以及我们何时应该使用IS-A和HAS- A?
答案 0 :(得分:25)
IS-A关系是遗产。继承的类称为子类或子类。另一方面,HAS - A关系是组合
在OOP中,IS - 关系完全是继承。这意味着,子类是一种父类。例如,苹果是一种水果。所以你会延长水果来获得苹果。
class Apple extends Fruit{
.
.
}
另一方面,组合意味着创建具有对其他对象的引用的实例。例如,一个房间有一张桌子。 因此,您将创建一个教室,然后在该类中创建一个类型为table的实例。
class Room{
:
Table table = new Table ();
:
:
}
HAS-A关系是动态(运行时)绑定,而继承是静态(编译时)绑定。 如果您只是想重用代码,并且您知道两者不是同一种类,请使用组合。例如,你不能从厨房烤箱。厨房有一个烤箱。 当你觉得有一种自然的关系,比如Apple就是Fruit的继承。
答案 1 :(得分:7)
Foo是一个酒吧:
public class Foo extends Bar{}
Foo有一个酒吧
public class Foo {
private Bar bar;
}