[英]Implement two interfaces with the same method signature but different return type
[英]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允许您使用协变返回类型来覆盖方法。
这意味着重写方法可以返回在重写方法上声明的类型的子类型。
在这种情况下, String
与Object
协变; 由于所有String
都是Object
,因此它是用于实现O.m1()
和 O.m2()
的合适返回类型。
但是,在单个类中不能有两个具有相同签名的方法(返回类型不是签名的一部分)。 因此,当返回类型兼容时,您最多只能实现1,如此处所示。 (如果它们不兼容,则会出现编译错误)。
String
是Object
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.