您的位置 首页 java

为什么Java中不支持多重继承?

我发现这个 Java 核心问题很难回答,因为你的答案可能不会让面试官满意,在大多数情况下,面试官正在寻找答案中的关键点,如果你提到这些关键点,面试官会很高兴。在Java中回答这种棘手问题的关键是准备好相关主题,以应对后续的各种可能的问题。

这是非常经典的问题,与为什么String在Java中是不可变的很类似;这两个问题之间的相似之处在于它们主要是由Java创作者的设计决策使然。

为什么Java中不支持多重继承?

常见java面试题,还在为面试纠结嘛?

为什么Java不支持 多重继承 ,可以考虑以下两点:

1)第一个原因是围绕钻石形继承问题产生的歧义,考虑一个类A有foo()方法,然后B和C派生自A,并且有自己的foo()实现,现在D类使用多个继承派生自B和C,如果我们只引用foo(),编译器将无法决定它应该调用哪个foo()。这也称为Diamond问题,因为这个继承方案的结构类似于菱形,见下图:

为什么Java中不支持多重继承?

即使我们删除钻石的顶部A类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么C++可以支持多重继承而Java不行。嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度,而是更多的可维护和更清晰的设计是驱动因素,虽然这只能由Java言语设计师确认,我们只是推测。维基百科链接有一些很好的解释,说明在使用多重继承时,由于钻石问题,不同的语言地址问题是如何产生的。

2)对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在转换、 构造函数 链接等过程中产生问题。假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。此外,Java可以通过使用接口支持单继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。

文章来源:智云一二三科技

文章标题:为什么Java中不支持多重继承?

文章地址:https://www.zhihuclub.com/184589.shtml

关于作者: 智云科技

热门文章

发表回复

您的电子邮箱地址不会被公开。

网站地图