使用静态和非静态方法重载方法

时间:2017-03-26 03:53:16

标签: java overloading

正如我所知,在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));

    }
}

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

3 个答案:

答案 0 :(得分:2)

使用关键字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;
    }
}

答案 1 :(得分:0)

是的,他们可以互相超载。见JLS

  

如果一个类的两个方法(无论是在同一个类中声明,还是   既由一个类继承,又一个是声明的,一个是继承的)   相同的名称,但不是覆盖等效的签名,然后是   方法名称被称为重载。

请参阅此Thread

答案 2 :(得分:0)

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