两个重载方法必须具有相同的返回值,才能称为“重载”吗?

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,相同的形参类型。


我认为屏幕截图中的问题是,您不能通过更改返回类型来重载方法。我会说这些选项的措辞相当糟糕。


以上是两个重载方法必须具有相同的返回值,才能称为“重载”吗?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>