“为什么java中不可能进行多重继承?”与问题有任何不同 “为什么java中不支持多继承?”或两者都是相互关联的。 我知道这已经得到了解答,只是寻找差异,如果没有答案的原因。
答案 0 :(得分:2)
两者都是同一个问题。
如果可能,我们最终可能会使用着名的Diamond death problem
。
Java创建者选择不允许多重继承的原因是它可能变得非常混乱。
简而言之,问题是如果一个类扩展了另外两个类,并且两个超类都有一个doStuff()
方法,那么子类继承哪个版本的doStuff()
?这个问题可以导致一种被称为“致命的死亡钻石”的场景,
由于可以在多继承设计中创建的类图的形状。当类B
和C
都扩展A
时形成菱形,B
和C
都继承A
的方法。如果班级D
同时延伸B
和C
,B
和C
都会覆盖A
中的方法,班级{{1}理论上,它继承了同一方法的两种不同实现。绘制为类图,四个类的形状看起来像钻石。“
因此,在Java中,为简单起见,您只有一个基类。搜索基类是从上到下的线性搜索,简单,快速和高效。
但是多重继承很有用,可以想象同一个类可能希望以不同的方式向不同的客户端表示。这是通过使用接口完成的。接口就像一个基类,但没有数据,也没有方法。
实施D
时,您必须提供所需的所有成员,这很容易理解。当计算机转换为interface
时,它需要做的就是从类型interface
开始,向上搜索基类,寻找实现object
的基类。
接口在10%的大脑空间和15%的CPU空间中完成95%的工作多重继承。接口不能执行多重继承的5%可以由interface
简单地实现。
这就是为什么它不受支持。