何时支持继承而不是作文

时间:2015-08-31 09:42:38

标签: oop inheritance composition

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

3 个答案:

答案 0 :(得分:13)

如果您使用的是没有多重继承的语言,那么总是赞成合成而不是继承。

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

使用组合,您可以执行继承所能做的一切,以及无法继承的一些事情,例如,模拟多重继承。

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

构建具有多个依赖关系的类实质上解决了从多个基类“继承”以实现可重用性的问题。

最初将继承作为概念包含在OOP中,因为OOP最初是根据多重继承来描述的。参见例如Object-Oriented Software Construction,它用Eiffel来解释OOP - 一种具有多重继承的编程语言。

答案 1 :(得分:3)

简而言之,

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

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

你倾向于打破你最初的假设,你需要在很多地方做出改变。如果你使用合成,你可以避免所有这些修复。

答案 2 :(得分:2)

我认为核心概念不是改变,可维护性等。在特定情况下,关系似乎比有关系更好吗?

推荐阅读:Gang Of Four关于Type,Interface,OOP等的讨论,然后才开始讨论模式。

另请看一下:  Composition vs. Inheritance: How to Choose?