2010-06-09 48 views

回答

11

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

例如,如果一个类继承了两个不同基类的同一方法的两个不同实现呢?

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

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

+0

这是为什么downvoted? – SLaks 2010-06-09 18:28:17

+1

想补充一点,可以解决这些问题(就像其他许多语言一样),只是没有太多的意义。 – 2010-06-09 18:32:35

0

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

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

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

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

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

0

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

1

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

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

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

相关问题