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

即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。
2、多重继承确实使设计复杂化并在强制转换、构造函数链接等过程中产生问题。
假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。
此外,Java 可以通过使用接口支持多继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。
1、 第一个原因围绕钻石💎形继承问题产生的歧义
考虑一个类 A 有 foo() 方法, 然后 B 和 C 派生自 A, 并且有自己的 foo() 实现,现在 D 类使用多个继承派生自 B 和 C。
如果我们只引用 foo(), 编译器将无法决定它应该调用哪个 foo(),这也称为 Diamond 问题,因为这个继承方案的结构类似于菱形,见下图:

即使我们删除钻石的顶部 A 类并允许多重继承,我们也将看到这个问题含糊性的一面。如果你把这个理由告诉面试官,他会问为什么 C++ 可以支持多重继承而 Java不行。
2、多重继承确实使设计复杂化并在强制转换、构造函数链接等过程中产生问题。
假设你需要多重继承的情况并不多,简单起见,明智的决定是省略它。
此外,Java 可以通过使用接口支持多继承来避免这种歧义。由于接口只有方法声明而且没有提供任何实现,因此只有一个特定方法的实现,因此不会有任何歧义。