何时支持继承而不是作文

Fre*_*der 6 oop inheritance composition

这个问题似乎是重复的,但事实并非如此.我用Google搜索,总线无法获得概念清晰度.有很多动物,汽车的例子.但是,我想了解基本逻辑.一般来说,赞成组合而不是继承,因为它提供了许多优点.在这种情况下,为什么继承被提供为OOP的主要概念之一.我的问题是何时支持继承优于作曲?

Mar*_*ann 13

如果您使用的语言没有多重继承,那么您应该始终支持组合而不是继承.

在没有多重继承的语言(Java,C#,Visual Basic.NET)中,引入一个继承层次结构会自动将您从所有其他备用继承层次结构中排除.在这些语言中,继承只会锁定您.

使用组合,您可以执行继承所能完成的所有操作,以及一些您无法继承的操作,例如,模拟多重继承.

让一个类实现多个接口实质上模拟了从任何客户端的角度来看的多重继承.

编写具有多个依赖项的类实质上解决了从多个基类"继承"以实现可重用性的问题.

最初将继承作为概念包含在OOP中,因为OOP最初是根据多重继承来描述的.参见例如面向对象的软件构造,它以Eiffel的形式解释OOP - 一种具有多重继承的编程语言.


Car*_*ine 5

简而言之,

如果是is-a关系,请使用继承。当关系为“ 有”时,请使用合成。

只要没有任何变化,继承就可以了。但是当您以后倾向于扩展/修改类的行为时,继承将面临很多问题。

您倾向于打破最初的假设,并且需要在很多地方进行更改。如果使用合成,可以避免所有这些固定。


Atu*_*tul 1

我认为核心概念比变化、可维护性等更重要。在特定情况下,“Is A”关系是否比“Has A”关系更好?

推荐阅读:Gang Of Four 在开始讨论模式之前对类型、接口、OOP 等的讨论。

另请参阅: 组合与继承:如何选择?