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

2022-09-01 05:34:33

我是JAVA的新手,刚刚开始学习“IS-A”和“HAS-A”关系,但我并没有真正理解它。

“IS-A”和“HAS-A”有什么区别?
何时应使用“IS-A”,何时应使用“HAS-A”?


答案 1

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

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

class Apple extends Fruit {

}

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

class Room {

    Table table = new Table();

}

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


答案 2

Foo is-a Bar:

public class Foo extends Bar{}

傅家酒吧

public class Foo {
    private Bar bar;
}