正如我所知,在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));
}
}
我读了一些文章,但他们没有澄清我的问题。
答案 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)
你有两种方法,一种是静态的,另一种是非静态的..所以这不是重载......因为这两种方法都单独存储在内存中......