为啥大多数编程语言不支持多重继承?
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个月后变得自然而容易.没什么大不了的。
唯一的问题是,在您意识到它的实用性和易用性之后,您往往会对不支持它的语言过敏,这可能会限制您的职业前景。
所以我的建议是远离它。
【讨论】:
只是出于好奇:您首选的语言是什么?哪种语言最能解决多重继承问题?以上是关于为啥大多数编程语言不支持多重继承?的主要内容,如果未能解决你的问题,请参考以下文章