java中的多重继承

问题描述 投票:8回答:8

Java不允许从多个类继承(仍允许从多个接口继承。),我知道它非常符合经典的钻石问题。但是我的问题是,当从多个基类继承时没有歧义(因此没有钻石问题的可能性)时,java不允许像C ++这样的多重继承?

java oop multiple-inheritance diamond-problem
8个回答
16
投票

这是Java的design decision。你永远不会得到它,所以不要太担心它。虽然MI可能会帮助你制作Mixins,但这是MI唯一能做到的好人。


6
投票

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

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

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


3
投票

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


2
投票

简单。引用Tom Sintes

Java设计团队努力制作Java:

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

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

在设计师看来,多重继承会导致比解决更多的问题和混乱。因此,他们从语言中删除了多个继承(就像它们削减了运算符重载一样)。设计师广泛的C ++经验告诉他们,多重继承并不值得头疼。


1
投票

Java设计师决定这样做。可以通过使用接口来模拟多重继承。


0
投票

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


0
投票

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

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

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


-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.