java - 两个接口中签名相同但返回类型不同的方法
问题描述
我有两个接口:
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
s 也是Object
s,因此它是实现O.m1()
and O.m2()
的合适返回类型。
但是在一个类中不能有两个具有相同签名的方法(返回类型不是签名的一部分)。因此,当返回类型兼容时,您最多只能实现 1,如这里。(如果它们不兼容,你会得到一个编译器错误)。
推荐阅读
- laravel - Laravel app.js 与数据表冲突
- python - Keras 从 CSV 加载图像
- groovy - 在 Groovy 中覆盖 metaClass 属性
- swift - Alamofire POST 请求替换输出中的字符
- c - _chsize 在 Visual Studio 2017 上引发断言错误
- r - 从函数内部打印到 R 控制台
- excel - MS Excel,多个条件下的平均值
- google-sheets - 谷歌表格条件格式取决于其他单元格
- matlab - Matlab:Semilogx() 不会绘制所有值
- php - 如何在 mysqli_query [PHP] 中包含数学?