为什么在java中不可能有多个继承

why multiple inheritances are not possible in java

本问题已经有最佳答案,请猛点这里访问。

"为什么Java中不可能有多重继承?"和这个问题有什么不同吗"为什么Java中不支持多重继承?"或者两者都是相互关联的。我知道这已经被回答了,只是在寻找一个不同的答案,如果没有,为什么。


两者都是相同的问题。

如果可能的话,我们可能会以著名的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实现。

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