使用不相关的返回类型inheritance方法

我有以下代码片段

public class Test { static interface I1 { I1 m(); } static interface I2 { I2 m(); } static interface I12 extends I1,I2 { I12 m(); } public static void main(String [] args) throws Exception { } } 

当我尝试编译它时,我收到了错误。

 Test.java:12: types Test.I2 and Test.I1 are incompatible; both define m(), but with unrelated return types. 

怎么避免这个?

正如Java中讨论的- 接口实现中的方法名称冲突,你不能这样做。

作为解决方法,您可以创建适配器类。

只有一种情况可以使用,这是由xamde提到的,但没有彻底解释。 它与协变返回类型有关 。

在JDK 5中,协变返回添加的位置,因此以下是一个有效的情况,可以正常编译并运行没有问题。

 public interface A { public CharSequence asText(); } public interface B { public String asText(); } public class C implements A, B { @Override public String asText() { return "C"; } } 

因此,以下将运行没有错误并打印“C”到主输出:

 A a = new C(); System.out.println(a.asText()); 

这是因为String是CharSequence的子类型。

这是Sun的Java 6编译器中的一个错误 。

我遇到了同样的问题,使用Oracle的JDK 7似乎没问题。