继承与组合

16 浏览
0 Comments

继承与组合

这个问题已经有答案了

可能重复:

继承是否优于组合?

我想知道,在存在这么多缺点的情况下,为什么(或在哪些情况下)应该考虑使用继承而不是组合:

  • 如果我们在子类中实现/覆盖调用超类方法的方法,没有保证另一个版本的超类(可能是某个库)不会破坏我们的代码
  • 如果超类中出现一个与子类方法相同签名但返回类型不同的新方法,则我们的类将无法编译。

因此,我无法想象我们如何依靠它。超类的作者可能希望提高性能,而我们的客户端代码可能会崩溃。

所以我的问题是:

  • 这些问题是如何解决的(例如在标准Java库中)?
  • 何时使用继承和组合?
admin 更改状态以发布 2023年5月21日
0
0 Comments

你的第一个反对意见也适用于组合:如果你调用的一个方法的实现发生了改变,就不能保证你的代码不会出现问题。

第二个反对意见实际上是一件好事,因为你会立即注意到新版本API中存在问题。

这个问题与继承/组合没有太大关系。如果一个类的公共契约从一个版本到另一个版本发生了改变,你就必须在你的代码中进行相应的更改。问题可以通过避免对向后不兼容的更改来解决。提供新的API可以是解决方法(例如io,接着是nio,然后是nio2)。否则,发布说明和迁移文档可以帮助过渡到API的另一个版本。

当你的类和其他类之间存在is-a关系时,使用继承。当你的类和其他类之间存在has-a关系时,使用组合。

0