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

时间:2010-06-09 18:24:40

标签: java inheritance abstract-class

  

可能重复:
  Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed

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

4 个答案:

答案 0 :(得分:14)

具体类的多重继承引发a variety of issues

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

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

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

答案 1 :(得分:2)

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

与继承不同,由于不存在这样的关系,它不会因为与超类的层次关系而自动接收属性或功能。

由于已经提到的Diamond继承问题,基本上不允许在Java或许多其他OO语言中进行多重继承。

答案 2 :(得分:1)

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

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

如果将接口视为一组数学声明,则每个“extends”仅提供超级接口和当前接口的集合的并集。因此,您可以做多个“工会”。

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

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

答案 3 :(得分:0)

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

相关问题