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

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

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

【问题讨论】:

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

标签: oop inheritance multiple-inheritance


【解决方案1】:

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

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

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

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

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      所以我的建议是远离它。

      【讨论】:

      • 只是出于好奇:您首选的语言是什么?哪种语言最能解决多重继承问题?
      猜你喜欢
      • 1970-01-01
      • 2011-04-15
      • 2011-02-21
      • 2016-04-18
      • 2014-03-04
      • 2011-03-17
      • 2011-03-24
      • 1970-01-01
      相关资源
      最近更新 更多