Java-使用相同的方法和不同的返回类型实现多个接口

考虑以下代码:

public interface A {

public A another();

}

public interface B {

public B another();

}

public interface AB extends A,B {

public AB another();

}

这会导致以下错误AB

类型B和A不兼容;都定义了another(),但是返回类型不相关

我已经看到了这样的问题,并按照公认的答案中的不兼容示例进行操作-即

public interface C { 

public void doSomething();

}

public interface D {

public boolean doSomething();

}

public interface CD extends C,D {

}

但是,在那种情况下,返回类型确实是不兼容的-返回类型不能同时为void和布尔值。而在上面的示例中,another()返回类型AB是an A和a

B,因此可以实现两个扩展接口。

此外,在查看了JLS(8.4.8、8.4.8.3、8.4.8.4)之后,我不太理解为什么我的示例在上面是非法的。谁能向我解释一下?

其次,除了重复AB中的合同要求之外,是否有其他解决方案/变通办法AB

回答:

对于Java

1.5之前的版本,会出现此错误消息(至少在Eclipse中将遵从级别设置为1.4时,我可以重现该错误)。换句话说,请确保您正在查看足够早的规格。

在Java> = 1.5上,以下命令可以正常编译。

interface A {

public A another();

}

interface B {

public B another();

}

interface AB extends A,B {

public AB another();

}

如您所说,由于AB既是AB,也满足两个接口。


以下是Java语言规范(第二版,即Java 1.4)的引文:

接口的成员是:

  • 这些成员在接口中声明。
  • 这些 。
  • 如果接口没有直接的超级接口,则[…]

因此,如果接口 或不兼容的throws子句,则将导致编译时错误。

此外, 当前 规范还表示以下内容:

如果接口的两种方法(都是在同一个接口中声明的,或者都是由一个接口继承的,或者一个声明且是一个继承的)的名称相同,但签名不同,那么它们不是等效的(第8.4.2节),则方法名称被认为是重载的。这个事实不会造成任何困难,并且它本身也不会导致编译时错误。返回类型之间或名称相同但签名不相同的两个方法的throws子句之间没有必需的关系。

以上是 Java-使用相同的方法和不同的返回类型实现多个接口 的全部内容, 来源链接: utcz.com/qa/421590.html

回到顶部