为啥大多数编程语言不支持多重继承?

Posted

技术标签:

【中文标题】为啥大多数编程语言不支持多重继承?【英文标题】:Why is multiple inheritance not supported in most of programming language?为什么大多数编程语言不支持多重继承? 【发布时间】:2011-02-20 02:05:58 【问题描述】:

为什么大多数编程语言都不支持多重继承?

我真的可以使用这个功能来开发不同布局的应用程序吗?

【问题讨论】:

一些原因:***.com/questions/191691/…, ***.com/questions/406081/…, ***.com/questions/225929/… 许多语言确实通过实现多个接口来支持它,php 也是如此。你能解释一下你想要做什么吗? 我正在组合各种类并构建一个主要类,通过它我可以访问所有子类中的所有方法。我的代码库很大,所以我想把它分开。 呵呵——我想答案很明显,大多数语言不支持它的原因是程序员选择做那样的事情^^^。查找单一责任原则。我对你的建议是删除所有继承作为一种做法,只使用接口。这样做一段时间后,您实际上应该使用继承的少数情况应该会变得很明显。还要记住每个班级应该很小,只做一件非常简单的事情。 @Bill K,自从我提出这个问题以来,我已经走了很长一段路,现在我很确定我应该做什么。感谢您的提示。 【参考方案1】:

作为开发人员,多重继承在许多情况下都很有用,但它极大地增加了语言的复杂性,这使得编译器开发人员和程序员的生活变得更加困难。

当两个父类具有相同名称的数据成员或方法时,会出现一个问题。子类引用了哪个是很难解决的。

当两个父类从同一个基类继承时会发生另一种情况,在继承层次结构中形成“钻石”模式。

需要指定父类的初始化/细化顺序 - 这有时会在继承顺序发生变化时导致行为发生变化 - 有些事情可能会让开发人员感到意外。

李>

某些语言支持对“super”或等效项的引用,它指的是此对象的基类的属性。这变得难以在具有多重继承的语言中得到支持。

某些语言尝试提供自动对象关系模型,因此可以使用常规 RDMS 使对象持久化。这种映射在最好的情况下是很困难的(它被描述为软件开发的“越南战争”),但如果支持多重继承,那就更困难了。

【讨论】:

【参考方案2】:

不支持它的一个原因是方法解析不明确。

http://en.wikipedia.org/wiki/Diamond_problem

但是,我不确定您所说的“大多数”编程语言是什么意思。今天使用的许多直接支持它(C++、Python、Perl、OCaml)或具有类似功能的机制(想到 Ruby 和 Scala)。

【讨论】:

【参考方案3】:

许多语言不支持多重继承的真正原因只是语言开发人员的懒惰。为了掩饰这个尴尬的失败,各种借口都找来了,“这让开发者过不去”bla bla,但是对于任何真正使用过实现它的语言的人来说,多继承在大约1个月后变得自然而容易.没什么大不了的。

唯一的问题是,在您意识到它的实用性和易用性之后,您往往会对不支持它的语言过敏,这可能会限制您的职业前景。

所以我的建议是远离它。

【讨论】:

只是出于好奇:您首选的语言是什么?哪种语言最能解决多重继承问题?

以上是关于为啥大多数编程语言不支持多重继承?的主要内容,如果未能解决你的问题,请参考以下文章

java中的多重继承是啥意思?

为什么像Java,C#和VB.NET现代面向对象的语言不支持多重继承[复制]

第53课 被遗弃的多重继承

Python支持多重继承吗?Python开发学习

C++ 抽象类二(抽象类的基本语法)

Python支持多重继承吗?Python开发学习