繁体   English   中英

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

[英]Methods with the same signature but different return type in two interfaces

我有两个接口:

interface S {
    public String m1();
}

interface O {
    public Object m1();
}

我决定在类Test中实现O和S:

class Test implements O, S {

}

我的问题 :

为什么我必须只实现public String m1()而不是另一个? 其次,为什么我不能实现public Object m1()而不是public String m1()

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

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

在这种情况下, StringObject协变; 由于所有String都是Object ,因此它是用于实现O.m1() O.m2()的合适返回类型。

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

StringObject Class的实例。 因此,当您实现接口方法时,您可以更改类型转换。 只有像int,double..and others 原始类型才能输入转换。

你可以用这个

class Test implements O, S {

    O  _o = new O() {
              @Override
              public Object m1(){
                return new Object();
              }
           };

    @Override
    public String m1(){
      return "";
    }
}

Test t = new Test();
t.m1();// m1 from s
t._o.m1();// m1 from O

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM