Java中的IS-A关系和HAS-A关系有什么区别?

What is the difference between IS -A relationship and HAS-A relationship in Java?

本问题已经有最佳答案,请猛点这里访问。

我是Java新手,刚刚开始学习IS-A和HAS-A关系,但得不到多少。我想想象一下这两个是如何不同的,什么时候我们应该使用IS-A和HAS-A?


关系就是继承。继承的类称为子类或子类。另一方面,有-一种关系就是组成

在OOP中,IS-关系完全是继承关系。这意味着子类是父类的一种类型。例如,苹果就是一种水果。所以你将延长水果的长度来得到苹果。

1
2
3
4
class Apple extends Fruit{
.
.
}

另一方面,组合意味着创建引用其他对象的实例。例如,一个房间有一张桌子。因此,您将创建一个教室,然后在该类中创建类型表的实例。

1
2
3
4
5
6
7
class Room{

:
Table table = new Table ();
:
:
}

HAS-A关系是动态(运行时)绑定,而继承是静态(编译时)绑定。如果您只想重用代码,并且知道这两种代码不是同一种类型,那么就使用组合。例如,你不能用厨房里的烤箱。厨房有烤箱。当你觉得有一种自然的关系就像苹果是一种水果的使用继承。


FO IS-A酒吧:

1
public class Foo extends Bar{}

福阿哈斯酒吧

1
2
3
public class Foo {
    private Bar bar;
}