为什么Java不支持多重继承,可以考虑以下两点。如果你把这个理由告诉面试官,他会问为什么C 可以支持多重继承而Java不行,④继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了,②是不是为了尽可能替代类的继承。
1、Java为什么不支持多继承?
这是非常经典的问题,与为什么String在Java中是不可变的很类似;这两个问题之间的相似之处在于它们主要是由Java创作者的设计决策使然。为什么Java不支持多重继承,可以考虑以下两点:第一个原因围绕钻石形继承问题产生的歧义,考虑一个类A有foo()方法,然后B和C派生自A,并且有自己的foo()实现,现在D类使用多个继承派生自B和C,如果我们只引用foo(),编译器将无法决定它应该调用哪个foo(),
这也称为Diamond问题,因为这个继承方案的结构类似于菱形,见下图:即使我们删除钻石的顶部A类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么C 可以支持多重继承而Java不行,嗯,在这种情况下,我会试着向他解释我下面给出的第二个原因,它不是因为技术难度,而是更多的可维护和更清晰的设计是驱动因素,虽然这只能由Java言语设计师确认,我们只是推测。
维基百科链接有一些很好的解释,说明在使用多重继承时,由于钻石问题,不同的语言地址问题是如何产生的,对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在强制转换、构造函数链接等过程中产生问题。假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它,此外,Java可以通过使用接口支持单继承来避免这种歧义。
2、java为什么要设计interface,是为了尽可能替代类的继承吗?
你好,你的问题包含了两个小问题,①java设计interface的原因?②是不是为了尽可能替代类的继承?接口与继承分别是什么?(定义)接口是一系列方法的声明,比如方法名、参数、返回值等信息,接口中的方法不实现,这些方法可以在不同的地方被不同的类实现,继承就是子类继承父类的特征和行为,使得子类具有父类的实例域和方法。
接口与继承的设计原因是什么?(用处)接口的主要作用在于降低代码的耦合度,屏蔽实现层,比如前后端接口交互的时候,大家约定好接口层就可以互不影响的干活了,至于接口实现后端可以慢慢做,继承的主要作用在于,在已有基础上继续进行功能的扩充①清晰体现相关类间的层次结构关系②减小代码的冗余度,大大增加程序的重用性。
接口与继承有什么区别?①定义的修饰符不同(interface),(extends)②接口中只能定义全局常量和抽象方法,而在继承中可以定义属性方法,变量,常量等,③接口被类实现时,在类中一定要实现接口中的所有方法,而继承可以调用指定方法。④继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了。