9

Java 不允许从多个类继承(它仍然允许从多个接口继承。),我知道它非常符合经典的菱形问题。但我的问题是,为什么在从多个基类继承时没有歧义(因此没有钻石问题的机会)时,java 不允许像 C++ 那样的多重继承?

4

8 回答 8

17

这是 Java 的设计决定。你永远不会得到它,所以不要太担心它。尽管 MI 可能会帮助您制作 Mixins,但这是唯一可以帮助您的 MI。

于 2009-08-11T19:39:25.467 回答
6

我读过大多数程序员没有以正确的方式使用多重继承。“继续从一个类继承只是为了重用代码”不是多重继承的最佳实践。

在大多数情况下,许多程序员不知道何时使用简单继承。必须谨慎使用多重继承,并且只有在您知道自己在做什么的情况下才能拥有良好的设计。

我不认为 java 中缺少多重继承(如在 c++ 中)会限制您的代码/应用程序设计/问题域映射到类。

于 2009-08-11T19:44:49.933 回答
3

简单。引用汤姆·辛特斯的话,

Java 设计团队努力制作 Java:

  • 简单、面向对象且熟悉
  • 坚固且安全
  • 架构中立且便携
  • 高性能
  • 解释的、线程的和动态的

从 Java 语言中省略多重继承的原因主要源于“简单、面向对象和熟悉”的目标。作为一种简单的语言,Java 的创建者想要一种大多数开发人员无需经过大量培训即可掌握的语言。为此,他们努力使该语言尽可能与 C++ 相似(熟悉),而不会继承 C++ 不必要的复杂性(简单)。

在设计者看来,多重继承带来的问题和混乱比它解决的要多。所以他们削减了语言的多重继承(就像他们削减了运算符重载一样)。设计者丰富的 C++ 经验告诉他们,多重继承根本不值得头疼。

于 2012-04-06T15:00:42.520 回答
3

如果java支持多重继承,那么它可能会影响java的其他特性
考虑用于调用超类构造函数的super()方法。如果程序有多个超类(因为多重继承),那么编译器会混淆应该使用哪个超类构造函数被调用并抛出错误

于 2013-06-15T17:26:03.247 回答
1

Java 设计者决定了这一点。多重继承可以通过使用接口来模拟。

于 2012-11-27T14:34:08.887 回答
0

一个简单的答案是 Java 中的所有类都派生自 java.lang.Object IIRC。所以,你总是会遇到钻石问题...... :-D

于 2009-08-11T19:54:41.207 回答
0

确实,Java 没有使用支持实现的多重继承(只是类型即接口)。那是一个设计决定。

但是,从 Java 8 开始,它支持使用默认方法的多重继承。请参阅http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html

实现的多重继承是从多个类继承方法定义的能力。这种类型的多重继承会出现问题,例如名称冲突和歧义。...默认方法引入了一种实现的多重继承形式。

于 2015-10-31T23:44:16.433 回答
-1

当多个父类定义它们自己的某些实现并且这两个的子类必须处理使用哪个实现的歧义时,就会出现菱形问题。那么如果 Java 中的所有类都派生自 Object,那就是一个单父类。“单父,多个派生类”与“多父,单派生类”不同

于 2011-03-11T19:43:13.537 回答