首页 > 解决方案 > 两个接口中签名相同但返回类型不同的方法

问题描述

我有两个接口:

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

解决方案


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

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

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

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


推荐阅读