对于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既是
A和
B,也满足两个接口。
以下是Java语言规范(第二版,即Java 1.4)的引文:
9.2接口成员
接口的成员是:
- 这些成员在接口中声明。
- 这些 成员是从直接超级接口继承的 。
- 如果接口没有直接的超级接口,则[…]
因此,如果接口 声明的方法具有相同的签名和不同的返回类型 或不兼容的throws子句,则将导致编译时错误。
此外, 当前 规范还表示以下内容:
9.4.2重载
如果接口的两种方法(都是在同一个接口中声明的,或者都是由一个接口继承的,或者一个声明且是一个继承的)的名称相同,但签名不同,那么它们不是等效的(第8.4.2节),则方法名称被认为是重载的。这个事实不会造成任何困难,并且它本身也不会导致编译时错误。返回类型之间或名称相同但签名不相同的两个方法的throws子句之间没有必需的关系。



