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

新手上路,请多包涵

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

原文由 abson 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 568
2 个回答

因为接口只指定类在做 _什么_,而不是它是 如何 做的。

多重继承的问题在于,两个类可能定义了 不同的方式 来做同样的事情,而子类无法选择选择哪一种。

原文由 Bozho 发布,翻译遵循 CC BY-SA 2.5 许可协议

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

假设我有一个类,它是烤面包机,还有另一个类,它是核弹。他们都可能有一个“黑暗”设置。它们都有一个 on() 方法。 (一个有 off(),另一个没有。)如果我想创建一个类,它是这两个的子类……如您所见,这是一个可能会在我面前爆发的问题.

因此,主要问题之一是,如果您有两个父类,它们可能对同一功能有不同的实现——或者可能是两个具有相同名称的不同功能,就像我讲师的例子一样。然后你必须决定你的子类将使用哪一个。当然,有一些方法可以处理这个问题——C++ 就是这样做的——但是 Java 的设计者认为这会使事情变得过于复杂。

但是,对于接口,您是在描述该类能够做的事情,而不是借用另一个类的方法来做某事。与多个父类相比,多个接口不太可能导致需要解决的棘手冲突。

原文由 Syntactic 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题