我有两个接口:
interface S {
public String m1();
}
interface O {
public Object m1();
}
Run Code Online (Sandbox Code Playgroud)
我决定在类Test中实现O和S:
class Test implements O, S {
}
Run Code Online (Sandbox Code Playgroud)
我的问题 :
为什么我必须只实现方法public String m1()而不是其他方法?其次,为什么我不能实现public Object m1()而不是public String m1()?
Java允许您使用协变返回类型来覆盖方法.
这意味着重写方法可以返回在重写方法上声明的类型的子类型.
在这种情况下,String是协变的Object; 因为所有的Strings也是Objects,所以它是适合实现O.m1() 和 返回的类型O.m2().
但是,在单个类中不能有两个具有相同签名的方法(返回类型不是签名的一部分).因此,当返回类型兼容时,您最多只能实现1,如此处所示.(如果它们不兼容,则会出现编译错误).