19.2 继承和组合

使用别的类主要有以下几种方法:
1.继承
继承可以获得父类所有的非private属性和方法的使用权,子类可以复写不符合要求的方法,没有复写过的方法,直接就使用父类,代码是共享的。可以说是相当方便。
2.组合
如果某种情况,并不适合继承(例如使用者根本不适合作为子类)但是又想使用这个类的一些方法,那么可以使用组合,也就是把这个类的对象,作为属性存在。
例如下面的代码,飞机类Plane想使用飞行这个功能,但是不能继承引擎类(Engine),因为这并不符合继承,飞机并不是引擎的一种。于是飞机把引擎列为属性之一,这样就合理多了,同时也可以通过对象engine使用引擎的功能了
public plane{
    private Engine engine;
}
组合比起继承,更“轻量”,组合不需要负担继承树的额外开销,例如必定要实现抽象方法。
3.实现
实现一个接口,本质上是接受标准,实现类必须按照标准实现里面的所有方法。实现类得到的好处,就是调用代码的统一性,这是另一个层面的代码复用。例如容器List和Set的实现类都需要实现它们的共同的父接口Collection的一些方法,例如求容器的总容量size(),某元素是否存在容器中contain,删除所有removeAll(),添加add(Object )
除此之外,还有更多的代码使用方式,称为设计模式,有兴趣的可以自行搜索。最经典的书是《设计模式-可复用面向对象软件的基础》,作者Eirch Gamma等四人。