可能重复:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed
为什么Java允许从接口进行多重继承,而不是从抽象或具体类继承
答案 0 :(得分:14)
具体类的多重继承引发a variety of issues。
例如,如果一个类从两个不同的基类继承同一个方法的两个不同实现,该怎么办?
为避免这些问题,Java不支持此功能 与具体类不同,接口不能有方法体。
因此,这些问题都不适用于接口。
答案 1 :(得分:2)
因为实现接口不是继承。它只是意味着您的类将遵守预定义的合同,通常是为了提供一组与某个功能相关的方法。任何类都可以遵守许多此类合同而不会发生冲突(除非其中两个接口定义了相同的方法)。
与继承不同,由于不存在这样的关系,它不会因为与超类的层次关系而自动接收属性或功能。
由于已经提到的Diamond继承问题,基本上不允许在Java或许多其他OO语言中进行多重继承。
答案 2 :(得分:1)
我真的不喜欢这里的“继承”这个词,它会导致很多混乱。
Java只允许接口扩展其他接口,并允许类实现接口。
如果将接口视为一组数学声明,则每个“extends”仅提供超级接口和当前接口的集合的并集。因此,您可以做多个“工会”。
当你最终到达一个实现一个或多个接口的类时,这里的语义只是该类必须为集合中的所有方法提供实现。实现多个接口的类可以重写为实现扩展所有上述接口的单个接口的类。
对于继承多个类的类,不允许这样做,因为它会导致各种问题,包括钻石问题。例如,如果我有两个超类型具有相同方法签名的不同实现,那么应该在子类型中使用哪一个?
答案 3 :(得分:0)
使语言更简单,更优雅。 C ++允许很多东西,但学习和使用往往很痛苦。我们(我,至少:))不希望java像那样。