Java是不允许从多个类继承(它仍然允许从多个接口继承。),我知道这是很内嵌经典钻石的问题。 但我的问题是,为什么Java是不允许多重继承像C ++时没有歧义(因此没有金刚钻问题的机会),同时从多个基类继承?
Answer 1:
这是一个设计决策的Java。 你永远不会得到它,所以不要担心太多。 虽然MI可能会帮助你做出的混入,这是唯一的好MI会做任何你。
Answer 2:
我已阅读,大多数程序员不正确的方式使用多重继承。 “先走一步,从一个类继承只是为了代码重用”是不是在多重继承的情况下,最好的做法。
许多程序员不知道什么时候才能在大多数情况下,使用简单的继承。 多重继承,必须谨慎使用,且仅当你知道,如果你想有一个良好的设计,你在做什么。
我不认为,缺乏在Java中多重继承(如C ++)的会把你的代码/应用程序的设计/问题域映射到限制类。
Answer 3:
简单。 引述汤姆Sintes ,
Java的设计团队力图使Java:
- 简单的,面向对象,和熟悉的
- 强大且安全
- 体系结构中立和便携式
- 高性能
- 解释,螺纹和动态
从Java语言省略多重继承的原因大多是从“面向简单,对象,熟悉的”目标干。 作为一种简单的语言,Java的创想,大多数开发人员可以掌握不全面的培训语言。 为此,他们努力使类似于C ++越好(熟悉)的语言,而不带过C ++的不必要的复杂性(简单)。
在设计师的意见,多重继承引发的问题和混乱比它解决的。 所以他们削减多重继承从语言(就像他们砍运算符重载)。 设计师的广泛的C ++的经验告诉他们,多重继承只是不值得的头痛。
Answer 4:
如果java支持多重继承那么它可能会影响其他Java功能
这是用来调用父类constructor.if程序考虑超()方法有多个超类(因为多重继承的),那么编译器会弄不清楚哪些超类的构造函数应该被调用,抛出一个错误
Answer 5:
Java的设计者决定。 多重继承可以通过使用接口来模拟。
Answer 6:
一个简单的答案是,在Java中所有类都从java.lang.Object继承IIRC派生。 所以,你总是有一个菱形的问题... :-D
Answer 7:
这是事实,Java的没有使用支持执行(刚刚的类型,即接口)的多重继承。 这是一个设计决策。
然而,由于Java的8,它支持使用缺省方法多重继承。 见http://docs.oracle.com/javase/tutorial/java/IandI/multipleinheritance.html :
实现多重继承是从多个类继承的方法定义的能力。 这种类型的多重继承,如名称冲突和模糊性出现问题。 ...默认方法介绍实施的多重继承的一种形式。
Answer 8:
当多个父类定义他们自己的东西实现和子类这两个必须处理的要使用的执行模糊的钻石出现问题。 那么,如果在Java中所有的类都派生自object,这是一个父类。 “单亲,多个派生类”是不一样的“多家长,单一的派生类”