【问题标题】:why multiple inheritances are not possible in java [duplicate]为什么在java中不可能进行多重继承[重复]
【发布时间】:2014-08-05 21:11:12
【问题描述】:

“为什么在 java 中不能进行多重继承?”与问题有什么不同 “为什么 java 不支持多重继承?”或者两者是相互关联的。 我知道这已经被回答了,只是寻找一个不同之处,如果没有答案的话。

【问题讨论】:

  • (换句话说,同样的事情。不可能,因为这是不允许的。)
  • 某种元问题?!但为了帮助您,这两个问题是相同的。
  • @AbimaranKugathasan 在我看来并不完全正确;这个问题只是解决了接口之外实现多重继承的替代方法,并没有涉及为什么
  • 多重继承是不可能的,因为它不受支持。不支持的原因已在原始问题中明确提及(这似乎是重复的)
  • 为什么问题会有所不同? “不可能”显然意味着“不支持”,反之亦然。交换一个词不会改变问题。

标签: java multiple-inheritance


【解决方案1】:

都是同一个问题。

如果可能的话,我们可能会得到著名的Diamond death problem

Java 的创建者选择不允许多重继承的原因是它会变得非常混乱。

简而言之,问题在于,如果一个类扩展了另外两个类,并且两个超类都有 doStuff() 方法,那么子类将继承哪个版本的 doStuff()?这个问题可能会导致以下情况被誉为“死亡之钻”

因为类图的形状可以在多重继承设计中创建。当类BC 都扩展A,并且BC 都从A 继承一个方法时,形成了菱形。如果D 类同时扩展了BC,并且BC 都覆盖了A 中的方法,则D 类在理论上继承了同一方法的两个不同实现.绘制成类图,四个类的形状看起来像个菱形。”

因此,在 Java 中,为简单起见,您只有一个基类。搜索基类是从上到下的线性搜索,简单、快速、高效。

但是多重继承是有用的,可以想象同一个类可能希望以不同的方式向不同的客户端表示自己。这是通过使用接口来完成的。接口就像一个基类,但不携带数据和方法。

当您实现interface 时,您必须提供它需要的所有成员,这很容易理解。当计算机转换为interface 时,它所要做的就是从object 类型开始并向上搜索基类,寻找实现interface 的基类。

接口为 10% 的大脑空间和 15% 的 CPU 空间执行多重继承的 95% 工作。接口做不到的那5%,多继承可以用composition简单实现。

这就是它不被支持的原因。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 2011-04-15
    • 2016-04-18
    • 2014-03-04
    • 2019-01-10
    • 1970-01-01
    • 2011-02-21
    • 2015-04-28
    • 1970-01-01
    相关资源
    最近更新 更多