Java:is-a和has-a

之前讨论过Java的代码复用问题,其中提到了组合、继承和代理三中复用方法。在进一步了解这三种方法的使用场景时,首先需要鉴别类之间的关系。

is-a

is-a:该关系依赖于继承。如果A是B,那么B就是A的基类。
比如土豆是蔬菜,公交车是载具,灯泡是电器等等。继承的一个性质就是继承是单向的,比如说公寓是建筑物,但是不是所有建筑物都是公寓。

has-a

has-a:这种关系称为组合。如果A中有B,那么B就是A的组成部分。
一个类的实例有指向另一个类的索引或者同一个类的其他实例。比如汽车有引擎,狗有尾巴等等。