两个重载方法必须具有相同的返回值,才能称为“重载”吗?
Oracle 人说,他们必须这样做,但我只是觉得很奇怪......
package com.xenoamess;
public class Main {
public int add(int a, int b) {
return a + b;
}
public long add(long a, long b) {
return a + b;
}
}
比如上面的两个函数不能叫“重载”吗?如果不能,为什么?
回答
上面的两个函数不能叫“重载”吗?
我们可以称之为重载,因为方法有不同的参数类型。
在JLS 中,重载定义为:
如果一个类的两个方法(无论是在同一个类中声明,还是都被一个类继承,或者一个声明一个继承)具有相同的名称但签名不是覆盖等效的,那么该方法名称被称为超载。
“覆盖等效签名”基本上意味着“考虑类型擦除时的相同签名”(在此处了解更多信息)。
方法的签名不包括返回类型:
两个方法或构造函数,M 和 N,如果它们具有相同的名称,相同的类型参数(如果有)(第 8.4.4 节),并且在将 N 的形式参数类型适应类型参数之后,则具有相同的签名M,相同的形参类型。
我认为屏幕截图中的问题是,您不能仅通过更改返回类型来重载方法。我会说这些选项的措辞相当糟糕。