方法引用模糊与多继承相同吗?

问题描述:

相关的问题:reference to valueOf is ambiguous方法引用模糊与多继承相同吗?

拥有这种情况下,相同的背景,为什么我们只能继承一个类,因为如果我们能够扩展两个类,对所有的静态字段等的命名会引起同样的问题?

从维基:

其增加的复杂性和模糊性的情况下,如“钻石问题”,其中哪个父类的特定的特征,从如果多于一个亲本继承了它可能是不明确类实现所述特征

+0

[为什么在Java或C#中不允许多重继承?](http://stackoverflow.com/questions/995255/why-is-multiple-inheritance-不被允许功能于Java的或-C)。事实上,在Java 8中,你可以实现多个具有相同默认方法的接口,因此没有多重继承更像是一个设计决定,而不是“无法完成”。 – 2015-03-31 14:08:17

+0

是你的问题为什么java不允许多继承? – 2015-03-31 14:09:11

+0

@BrettOkken不,问题是:是多重继承遇到的问题之一,也是使用共享相同方法的2个静态导入时的问题之一。 (in Java) – WonderWorld 2015-03-31 14:23:10

至于是在问题挂钩的具体问题,我想答案是没有

原始问题是关于当您尝试在同一个Java类中导入Float.valueOf()和Integer.valueOf()时,静态导入valueOf()会发生冲突。

但是这种碰撞与多重继承无关。重点是:如果你在他们的“封闭”类中考虑这些方法,他们当然是“不同的”。但是当这种情况被“删除”时,就不能再区分它们了。

换言之:静态导入方法时不涉及“多重继承”。只要将静态导入看作是定义某种“别名定义”的机制即可。而且你不能使用“同一个”别名来表示两个不同的东西

+0

我知道它与多继承毫无关系,我的意思是你可以使用2静态导入,模糊错误,如果我们不能使用多重继承的原因之一,也可能遇到问题,因为它是不难想象它会。 – WonderWorld 2015-03-31 14:18:39

静态方法不会引入多重继承的新/不同问题。如果有任何问题,他们的复杂程度要略低于they are not polymorphic

不,钻石问题比这个要多得多。

是的,的确,多重继承会导致需要解决的名称冲突。这可以通过添加上下文来轻松完成,并且示例是how default methods handle this scenario。你的问题与此非常相似。

但是钻石问题有一个更有趣的部分:在两个不同的路线上从共同祖先继承的字段(而不是方法)会发生什么?这就是允许多个继承完全需要回答的语言。 (并且它们以各种方式执行)。

+0

我认为,在某些情况下,您需要准确指定需要去的地方。正确... – WonderWorld 2015-03-31 18:06:11

+0

@WonderWorld是的,但正如我所说,这不是钻石问题的关键部分。或者回顾一下你的问题,这并不是Java没有多态继承的原因(只有类型,最近的行为)。 – biziclop 2015-03-31 21:23:46