Java中支持多重继承吗,为什么?
为什么Java不支持多重继承,可以考虑以下两点:
1.第一个原因是围绕钻石GEM形继承问题产生的歧义。考虑一个类A有foo()方法,然后B和C派生自A,并且有自己的foo()实现,现在D类使用多个继承派生自B和C,如果我们只引用foo(),编译器将无法决定它应该调用哪个foo()。这也称为Diamond问题。
那为什么C++可以支持多重继承而Java不行。嗯,在这种情况下,它不是因为技术难度,而是更多的可维护和更清晰的设计是驱动因素。
2.对我来说第二个也是更有说服力的理由是,多重继承确实使设计复杂化并在转换、构造函数链接等过程中产生问题。假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。此外,Java可以通过使用接口支持多重继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现(或提供了一个默认实现),因此只有一个特定方法的实现,因此不会有任何歧义。
每个语言有每个语言的特性,运算符重载不是java支持的特性,也没有规定必须有替代实现。就像java至今不支持闭包一样,运算符重载也没有代替实现。对面向对象的语言来说,运算符本身就不够“面向对象”,一切都可以用方法来实现。