在 Ken Arnold、James Gosling、David Holmes 的“THE Java™ Programming Language, Fourth Edition”中提到:
段落:(4.3.2) “类似地,如果一个接口(interface)继承了多个具有相同签名的方法,或者如果一个类实现了包含具有相同签名的方法的不同接口(interface),则只有一个这样的方法。这个方法的实现最终由实现接口(interface)的类,那里没有歧义。如果方法具有相同的签名但返回类型不同,则其中一个返回类型必须是所有其他返回类型的子类型,否则会发生编译时错误。实现必须定义一个返回该公共(public)子类型的方法。”
任何人都可以给我一些示例代码来证明上述段落的观点吗?
我尝试编写代码并测试提到的内容,但出现编译时错误 子接口(interface)隐藏了基接口(interface)方法,只能实现子接口(interface)方法。
提前致谢。 -阿伦
最佳答案
interface A {
void method();
Object returnMethod();
}
interface B {
void method();
B returnMethod();
}
class Impl implements A,B
{
void method() { }
B returnMethod() { }
}
如您所见,Impl.method()
实现了 A.method()
和 B.method()
,而 Impl.returnMethod()
返回一个 B
,它是 Object
的子对象,从而实现了 A.returnMethod()
的契约也是。后者是否需要一个不是 B.returnMethod()
返回类型的父级的返回类型,这将是一个 comile 错误,因为 Impl
中不存在这样的实现>.
关于Java 接口(interface) : Inheriting, 覆盖和重载方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/877587/