继承很强大,然而会破坏封装性,因而是有问题的。继承有时很脆弱。
继承缺点:
子类需要很好的了解父类细节,避免出错, 耦合性强。
继承优点:
差不多就是组合的缺点吧。
最著名例子:JpaRepository, 用户继承这个类,即可具备很多默认查询方法。
其次可以用来代替TAG class。比如一个Rectangle类,根据一个标识,既可以用来表示矩形,又可表示圆形,这就是一个TAG class。 这样设计会比较凌乱,就不如设计一个抽象类,另外定义矩形类和圆形类去继承这个父类。除了凌乱外,TAG类的成员变量无法为final,也是不利之处。因为有冗余变量,故而占用内存也大。
组合的缺点:
门面模式时,需要写很多啰嗦的调用原对象接口代码。
组合的优点:
若父类API设计的不好,可以重新设计API。
使用继承时候注意事项,如何更好使用继承。
写注释,记录哪些方法会调用子类覆盖的方法。