两个接口中具有相同签名但返回类型不同的方法

Spn*_*Spn 5 java

我有两个接口:

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()

And*_*ner 8

Java允许您使用协变返回类型来覆盖方法.

这意味着重写方法可以返回在重写方法上声明的类型的子类型.

在这种情况下,String是协变的Object; 因为所有的Strings也是Objects,所以它是适合实现O.m1() 返回的类型O.m2().

但是,在单个类中不能有两个具有相同签名的方法(返回类型不是签名的一部分).因此,当返回类型兼容时,您最多只能实现1,如此处所示.(如果它们不兼容,则会出现编译错误).

  • 至于问题的第一部分,请参阅[在Java中使用不同的返回类型进行重载?](/sf/ask/170784771/) (2认同)