Java变量混乱?
我对这个代码有问题Java变量混乱?,java,oop,Java,Oop,我对这个代码有问题 class A{} class B extends A{} public class TestExms { static String s="-"; public static void main(String[] args) { A[] aa = new A[2]; B[] ba = new B[2]; sifter(aa); sifter(ba); sifter(7); Sy
class A{}
class B extends A{}
public class TestExms {
static String s="-";
public static void main(String[] args) {
A[] aa = new A[2];
B[] ba = new B[2];
sifter(aa);
sifter(ba);
sifter(7);
System.out.println(s);
}
static void sifter(A[]... a2){s+="1";}
static void sifter(B[]... b1){s+="2";}
static void sifter(B[] b1){s+="3";}
static void sifter(Object o){s+="4";}
}
当我运行此代码时,输出将为“-434”。
问题是为什么:
这A[]aa=新的A[2]代码>当传递到筛选器(aa)时代码>此操作不调用静态空洞筛选器(A[]…a2){s+=“1”}
。它将调用此方法staticvoidsifter(objecto){s+=“4”;}
谁能给我解释一下吗?
这个(A[]…a2)
里面发生了什么
当通过筛子(aa)时;这不称为静态空洞筛选器(A[]…a2){s+=“1”;}
您在varargs
中给出了错误的语法(似乎很困惑)
您将您的功能定义为
static void sifter(A[]... a2) {
s += "1";
}
这意味着您接收的是A[]
的数组,而不是A
当您将签名更改为
static void sifter(A... a2) {
s += "1";
}
当你写作时
static void sifter(A[]... a2) {
s += "1";
}
这相当于
static void sifter(A[] a1, A[] a2, A[] a3) { // and so on
s += "1";
}
因此,当您将A[]传递给它时,它将While数组视为对象,而不是A[]
您在varargs中给出了错误的语法no really。。值得注意的是,当您从程序筛选器(aa)中删除方法筛选器(对象o)
是对方法筛选器的有效调用(A[]..aa)代码>