“为什么在java中多重继承是不可能的?”与问题有什么不同吗 “为什么java不支持多重继承?”或者两者是相互关联的。 我知道这个问题已经得到了回答,只是寻找差异(如果有的话)而不是原因的答案。
最佳答案
两者都是同一个问题。
如果可能的话,我们最终可能会得到著名的 Diamond death problem
.
Java 的创建者选择不允许多重继承的原因是它可能会变得非常困惑。
简而言之,问题在于,如果一个类扩展了另外两个类,并且两个父类(super class)都有一个 doStuff()
方法,哪个版本doStuff()
子类会继承吗?这个问题可能会导致一种称为“死亡钻石”的情况,
因为可以在多重继承设计中创建类图的形状。钻石是在类 B
时形成的和C
两者都延伸A
,以及两者 B
和C
从 A
继承方法。如果类D
扩展两者 B
和C
,以及两者 B
和C
已覆盖 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/