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

问题

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


#1 热门回答(183 赞)

因为接口只指定了类正在做什么,所以不会这样做。

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


#2 热门回答(83 赞)

我的一位大学教师用这种方式向我解释:

假设我有一个类,一个是Toaster,另一个类是NuclearBomb。它们都可能具有"黑暗"设置。它们都有一个on()方法。 (一个有一个off(),另一个没有。)如果我想创建一个类,这是这两个的子类...正如你所看到的,这是一个问题,可能真的在我脸上爆炸了。

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

但是,通过接口,你可以描述类能够执行的操作,而不是借用另一个类的执行方法。与多个父类相比,多个接口不太可能导致需要解决的棘手冲突。


#3 热门回答(22 赞)

因为继承被过度使用,即使你不能"嘿嘿,那个方法看起来很有用,我也会扩展那个类"。

public class MyGodClass extends AppDomainObject, HttpServlet, MouseAdapter, 
             AbstractTableModel, AbstractListModel, AbstractList, AbstractMap, ...