相关问题:reference to valueOf is ambiguous
这种情况与我们为什么只能扩展一个类的背景相同,因为如果我们可以扩展两个类,对于所有静态字段等,命名可能会导致同样的问题吗?
来自维基:
在诸如钻石问题"等情况下,它增加了复杂性和模糊性,如果多个父类实现了所述特征,那么从哪个父类继承特定特征可能是模棱两可的
答案 0 :(得分:0)
关于问题中链接的具体问题,我认为答案是否。
最初的问题是,当试图在同一Java类中导入Float.valueOf()和Integer.valueOf()时,valueOf()
的静态导入会发生冲突。
但是这次碰撞与多重继承无关。关键是:如果你在“封闭”类的上下文中考虑这些方法,它们当然是“不同的”。但是当“移除”上下文时,它们就再也无法区分了。
换句话说:静态导入方法时不涉及“多重继承”。只需将静态导入视为定义某种“别名定义”的机制。并且你不能使用“相同”的别名来表示两个不同的东西。
答案 1 :(得分:0)
静态方法不会引入多重继承的新/不同问题。如果有的话,它们就像they are not polymorphic那样复杂一点。
答案 2 :(得分:0)
不,钻石问题不仅仅是这个问题。
是的,多重继承确实会导致需要解析的名称冲突。这可以通过添加上下文轻松完成,示例为how default methods handle this scenario。你的问题非常类似于此。
但是钻石问题有一个更有趣的部分:在两条不同的路线上从一个共同的祖先继承的字段(而不是方法)会发生什么?这是允许多重继承的语言需要回答的问题。 (他们以各种方式做到这一点。)