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

Mil*_*lan 5 java

我是JAVA的新手,刚刚开始学习IS-A和HAS-A关系,但是得不到多少.我想想象一下这两者是如何不同的以及我们何时应该使用IS-A和HAS-A?

小智 28

IS-A关系是遗产.继承的类称为子类或子类.另一方面,HAS - A关系是组合

在OOP中,IS - 关系是完全继承的.这意味着,子类是一种父类.例如,苹果是一种水果.所以你会延长水果来获得苹果.

class Apple extends Fruit{
.
.
}
Run Code Online (Sandbox Code Playgroud)

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

class Room{

:
Table table = new Table ();
:
:
}
Run Code Online (Sandbox Code Playgroud)

HAS-A关系是动态(运行时)绑定,而继承是静态(编译时)绑定.如果您只是想重用代码,并且您知道两者不是同一种类,请使用组合.例如,你不能从厨房烤箱.厨房有一个烤箱.当你觉得像Apple这样的自然关系是Fruit的继承.


Joh*_*ohn 8

Foo是一个酒吧:

public class Foo extends Bar{}
Run Code Online (Sandbox Code Playgroud)

Foo有一个酒吧

public class Foo {
    private Bar bar;
}
Run Code Online (Sandbox Code Playgroud)