Java:你怎么称这种多重继承模糊?

Syn*_*r0r 9 java inheritance multiple-inheritance diamond-problem

这是在Java中使用多接口继承的示例,这是一个问题.

请注意,我完全知道为什么会出现问题,这不是我的问题.问题是关于如何命名这个特定的多接口继承歧义,如果它有一个名称.

例如,在C++中,当您使用多个实现继承并且无法确定使用哪个重写方法时出现的歧义称为"钻石问题":

http://en.wikipedia.org/wiki/Diamond_problem

再一次,我知道这不是同一个问题:那不是重点.关键是在之前的案例中创造了一个名称.

而且我想知道我将要描述的问题是否存在名称.

下面是另一种多重继承的示例,其中一个接口继承自另外两个具有不兼容方法返回类型的接口:

interface A {
  void a();
  Integer c();
}

interface B {
  void b();
  Long c();
}

interface MI extends A, B {...}
Run Code Online (Sandbox Code Playgroud)

(使用'extends'关键字注意工作中的多个接口继承)

你做不到,因为:

A型和B型不兼容; 两者都定义c()但具有不相关的返回类型

有没有一个名字来描述这种情况?

Luc*_*ero 3

我不确定它有一个具体的名称,或者至少它似乎不太常用。这“只是”接口方法到类方法的隐式映射的问题;如果您可以有仅返回类型不同的重载,那么也不会有问题。所以这归结为签名/重载/隐式方法映射问题。

在《Thinking in Java》在线书中,也没有为它命名。 http://www.linuxtopia.org/online_books/programming_books/thinking_in_java/TIJ310_001.htm

顺便说一句,C# 允许显式接口实现,这解决了这个问题。

  • @MatrixFrog:是的,但是“组合接口时的名称冲突”对我来说听起来更像是对问题的描述,而不是问题的“标准”名称。 (2认同)