繁体   English   中英

java中的多重继承

[英]Multiple Inheritance in java

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

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

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

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

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

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

简单。 引用Tom Sintes的话

Java设计团队努力制作Java:

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

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

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

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

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM