java - 为什么在java中多重继承是不可能的

标签 java multiple-inheritance

“为什么在java中多重继承是不可能的?”与问题有什么不同吗 “为什么java不支持多重继承?”或者两者是相互关联的。 我知道这个问题已经得到了回答,只是寻找差异(如果有的话)而不是原因的答案。

最佳答案

两者都是同一个问题。

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

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

简而言之,问题在于,如果一个类扩展了另外两个类,并且两个父类(super class)都有一个 doStuff()方法,哪个版本doStuff()子类会继承吗?这个问题可能会导致一种称为“死亡钻石”的情况,

因为可以在多重继承设计中创建类图的形状。钻石是在类 B 时形成的和C两者都延伸A ,以及两者 BCA 继承方法。如果类D扩展两者 BC ,以及两者 BC已覆盖 A 中的方法,类D理论上,继承了同一方法的两种不同实现。绘制为类图,四个类的形状看起来像一个菱形。”

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

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

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

接口(interface)为 10% 的大脑空间和 15% 的 CPU 空间完成 95% 的多重继承工作。接口(interface)做不到而多重继承能做到的那5%,可以通过 composition 来简单实现.

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

关于java - 为什么在java中多重继承是不可能的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24236993/

相关文章:

python - 将行为添加到外部模块返回的对象的 pythonic 方法是什么?

oop - 实现多个接口(interface)是否违反单一职责原则?

执行 jacoco 准备代理时,使用反射捕获的 Java 注释将不起作用

java - 如何将 java.time.ZonedDateTime 转换为 XMLGregorianCalendar?

java - 如何将 java 注释处理器集成到 java 插件中

java - 在真实的基于 Java 的企业应用程序中,应该在哪一层进行验证?

java - 一个类文件可以实现多少接口(interface)

java - Hibernate Session saveOrUpdate 不更新

c++ - 多模板化接口(interface)继承名称隐藏

c++ - 在 C++ 中覆盖函数时如何选择基类?