可能重复:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed为什么Java的允许多重继承的接口,而不是从抽象/具体类
为什么Java允许多重继承的接口,而不是从抽象或具体类
可能重复:
Why there is no multiple inheritance in Java, but implementing multiple interfaces is allowed为什么Java的允许多重继承的接口,而不是从抽象/具体类
为什么Java允许多重继承的接口,而不是从抽象或具体类
具体类的多继承引发a variety of issues。
例如,如果一个类继承了两个不同基类的同一方法的两个不同实现呢?
为了避免这些问题,Java不支持此功能。
与具体类不同,接口不能有方法体。
因此,这些问题都不适用于接口。
这是为什么downvoted? – SLaks 2010-06-09 18:28:17
想补充一点,可以解决这些问题(就像其他许多语言一样),只是没有太多的意义。 – 2010-06-09 18:32:35
我真的不喜欢这里的“继承”这个词,它会导致很多混乱。
Java只允许接口扩展其他接口,并为类实现接口。
如果将接口视为一组数学声明,则每个“扩展”仅提供超级接口和当前接口的集合的联合。因此你可以做多个“工会”。
当您最终到达实现一个或多个接口的类时,这里的语义仅仅是该类必须为该集合中的所有方法提供实现。实现多个接口的类可以重写为实现单个接口的类,该接口扩展了上述所有接口。
在类继承多个类的情况下,它是不允许的,因为它会导致各种问题,包括钻石问题。例如,如果我有两个具有相同方法签名的不同实现的超类型,应该在子类型中使用哪一个?
使语言更简单,更优雅。 C++允许很多东西,但是学习和使用通常很痛苦。我们(我,至少:))不希望Java是那样的。
因为实现一个接口不是继承。它只是意味着您的课程将遵守预定义的合同,通常提供一组与特定功能相关的方法。任何类都可以坚持许多这样的契约而不会发生冲突(除非这些接口中的两个定义了相同的方法)。
与继承不同,由于不存在这种关系,它不会自动接收属性或功能,因为它与超类存在层次关系。
由于已经提到的Diamond继承问题,Java或许多其他OO语言基本上不允许多继承。
重复的http://stackoverflow.com/questions/2515477/why-there-is-no-multiple-inheritance-in-java-but-implementing-multiple-interface – 2010-06-09 18:29:35