可能重复:
更喜欢组合而不是继承?
我想知道,当有这么多缺点时,为什么(或在哪些情况下)应该考虑继承而不是组合:
- 如果我们在调用超类方法的子类中实现/覆盖一个方法,则不能保证我们的超类的另一个版本(可能是某个库)不会破坏我们的代码
- 如果超类中出现新方法,其签名与子类方法具有相同的签名,但返回类型不同,则我们的类将无法编译。
因此,我无法想象,我们究竟如何依赖它。超类作者可能想要提高性能,而我们的客户端代码可能会崩溃。
所以我的问题是:
- 这些问题是如何解决的(例如在标准 Java 库中)?
- 何时使用继承和组合?