【问题标题】:Method overloading with both static and non-static methods静态和非静态方法的方法重载
【发布时间】:2017-03-26 03:53:15
【问题描述】:

据我所知,在 Java 方法重载中,我们对所有重载方法使用相同的名称。而且,它们的返回类型也不是问题。但是如果我们使用与静态和非静态形式相同的方法会发生什么,如下例所示?我们可以考虑这个方法重载吗?

class Adder {

    static int add(int a, int b) {
        return a + b;
    }

    int add(int a, int b, int c) {
        return a + b + c;
    }

}

class Test {

    public static void main(String[] args) {
        Adder a1 = new Adder();

        System.out.println(Adder.add(11, 11));

        System.out.println(a1.add(11, 11, 51));

    }
}

我阅读了一些文章,但它们没有澄清我的问题。

【问题讨论】:

标签: java overloading


【解决方案1】:

使用关键字static 不会对方法重载产生影响。

您的代码可以编译,因为两个 add() 方法的方法签名不同(2 个参数与 3 个参数)。

但是,如果你要写这样的东西,那么会导致编译错误

class Adder {
    static int add(int a, int b) {
        return a + b;
    }

    int add(int a, int b) {
        return a + b;
    }
}

【讨论】:

    【解决方案2】:

    是的,它们可以互相超载。看到这个JLS

    如果一个类的两个方法(无论都是在同一个类中声明,还是 都由一个类继承,或者一个声明一个继承)具有 名称相同但签名不是覆盖等效的,则 方法名被称为重载。

    看到这个Thread

    【讨论】:

      【解决方案3】:

      你有两种方法,一种是静态的,另一种是非静态的……所以这不是重载……因为这两种方法都分别存储在内存中……

      【讨论】:

      • 这是错误的。静态方法和非静态方法之间的区别只是一点标志。它们都以类文件格式出现在方法所在的位置。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多