为什么Java允许来自接口的多重inheritance,而不是来自抽象/具体类

可能重复:
为什么Java中没有多重inheritance,但允许实现多个接口

为什么Java允许从接口进行多重inheritance,而不是从抽象或具体类inheritance

具体类的多重inheritance引发了各种各样的问题 。

例如,如果一个类从两个不同的基类inheritance同一方法的两个不同实现,该怎么办?

为避免这些问题,Java不支持此function。
与具体类不同,接口不能具有方法体。

因此,这些问题都不适用于接口。

因为实现接口不是inheritance。 它只是意味着您的类将遵守预定义的合同,通常是提供一组与某个function相关的方法。 任何类都可以遵守许多此类合同而不会发生冲突(除非其中两个接口定义了相同的方法)。

与inheritance不同,由于不存在此类关系,因此与其超类的层次关系不会自动接收属性或function。

由于已经提到过的Diamondinheritance问题,Java或许多其他OO语言基本上不允许多重inheritance。

我真的不喜欢这里的“inheritance”一词,它会导致很多混乱。

Java只允许接口扩展其他接口,并允许类实现接口。

如果将接口看作一组数学声明,那么每个“扩展”仅提供来自超接口和当前接口的集合的并集。 因此,您可以做多个“工会”。

当你最终到达一个实现一个或多个接口的类时,这里的语义只是该类必须为集合中的所有方法提供实现。 实现多个接口的类可以重写为实现扩展所有上述接口的单个​​接口的类。

在inheritance多个类的类的情况下,它是不允许的,因为它会导致各种问题,包括钻石问题。 例如,如果我有两个超类型具有相同方法签名的不同实现,那么应该在子类型中使用哪一个?

使语言更简单,更优雅。 C ++允许很多东西,但学习和使用往往很痛苦。 我们(我,至少:))不希望java像那样。