为什么Java中没有多重继承,但允许实现多个接口?

Java不允许多重继承,但它允许实现多个接口。为什么?


答案 1

因为接口只指定类正在执行的操作,而不是它是如何执行的。

多重继承的问题在于,两个类可能定义了执行相同操作的不同方式,并且子类无法选择要选择哪一个。


答案 2

我的一位大学导师这样向我解释:

假设我有一个类,这是一个烤面包机,另一个类,这是核炸弹。他们俩都有一个“黑暗”的设置。它们都有一个 on() 方法。(一个有 off(),另一个没有。如果我想创建一个类,它是这两个子类的子类...正如你所看到的,这是一个可能真的在我脸上爆发的问题。

因此,其中一个主要问题是,如果您有两个父类,则它们可能具有同一功能的不同实现 - 或者可能具有相同名称的两个不同功能,如我的教师的示例所示。然后,您必须决定您的子类将使用哪一个子类。当然,有办法解决这个问题——C++这样做——但是Java的设计者认为这会让事情变得太复杂了。

但是,对于接口,您正在描述该类能够执行的操作,而不是借用另一个类的方法来执行某些操作。与多个父类相比,多个接口导致需要解决的棘手冲突的可能性要小得多。