将组合放在继承之上。

6 浏览
0 Comments

将组合放在继承之上。

这个问题已经有答案了

更喜欢组合而非继承吗?

更喜欢组合而非继承

这是一个非常流行的说法。我读了几篇文章,每篇文章最后都说

当类之间有纯粹的 IS-A 关系时使用继承。

本文的一个例子来自这篇文章

这里苹果水果之间有明确的 IS-A 关系,即苹果是一种水果,但作者还展示了苹果拥有水果的关系(组合),以展示使用继承时的问题。

我在这里有点困惑,它的意思是什么啊?

当类之间有纯粹的 IS-A 关系时使用继承。

是不是更喜欢使用组合而不是继承,即使有一个纯粹的 IS-A 关系,只有在组合不合适的情况下才使用继承?

admin 更改状态以发布 2023年5月23日
0
0 Comments

我认为这是面向对象设计中最讨论的问题之一。正如文章中建议的那样,组合总是比继承更为优先。但这并不意味着你永远不应该使用继承,你应该在其更加合理时使用它(这可以有争议)。

使用组合有许多优点,其中几个如下:

  • 你将完全控制你的实现,即你只能公开你想要公开的方法。
  • 超类中的任何更改都可以通过仅在你的类中进行修改来保护。使用你的类的任何客户端类都不需要进行修改。
  • 允许你控制何时加载超类(延迟加载)
0
0 Comments

当您使用继承从超类重用代码时,而不是重写方法并定义另一种多态行为时,通常表明您应该使用组合而不是继承。

java.util.Properties类是继承的一个坏例子。它扩展了哈希表而不是使用哈希表来存储其属性,以便重用其方法并避免使用委托重新实现某些方法。

0