effective java 读书笔记-类和接口

复用建议:组合优先于继承

如果需要复用代码,我们第一想到的是使用继承,但是这只是面向对象的一种复用方式- 白盒复用。
子类继承父类,父类中的实现对子类可见,若是父类的实现代码改变,子类代码也就需要跟着改变。
另一种方式,对象组合-黑盒复用。对象组合要求对象之间定义好接口,相互之间使用接口引用。对象内部的实现是不可见的。

因为继承父类,父类的实现对子类完全可见甚至可改变,所以父类中的任何一个改变都有可能影响到子类,这样破坏了封装性,代码非常脆弱。
而使用组合的方式,对象之间使用接口的方式进行调用。接口的实现改变了,但并不影响接口外部的调用,这样的代码非常稳固,复用性高

使用原则:大多数情况下,组合方式优先于继承,使用这种方式的代码更容易维护。