继承与聚合
关于如何在面向对象的系统中最好地扩展、增强和重用代码,有两个学派:
继承:通过创建子类来扩展类的功能。重写子类中的超类成员以提供新功能。使方法抽象/虚拟,以便在超类需要特定接口但对其实现不可知时,强制子类“填充空白”。
聚合:通过接受其他类并将它们组合成一个新类来创建新功能。将公共接口附加到此新类,以便与其他代码进行互操作性。
每种方法的好处、成本和后果是什么?还有其他选择吗?
我看到这场辩论是定期出现的,但我认为还没有人问到堆栈溢出问题(尽管有一些相关的讨论)。谷歌也令人惊讶地缺乏良好的搜索结果。