请帮我解决问题。因为我的答案与Kathie siera书籍答案有所不同。对于下面的代码,由于重新声明为sifter(BB,我得到编译错误)。 但在书中答案是“-434”
class AA{}
class BB extends AA{
}
public class ComingThru {
static String s="-";
public static void main(String args[])
{
AA aa []=new AA[2];
BB bb []=new BB[2];
sifter(aa);
System.out.println(s);
sifter(bb);
sifter(7);
System.out.println(s);
}
static void sifter(AA... a2)
{
s+="1";
}
static void sifter(BB... a2)
{
s+="2";
}
static void sifter(BB[] a3)
{
s+="2";
}
static void sifter(Object o){
s+="4";
}
}
答案 0 :(得分:0)
我检查了这本书,前两个函数的参数不是AA或BB,是AA或BB的数组: 它应该是这样的:
static void sifter(AA[] ... a2) {s += "1"}
static void sifter(BB[] ... b1) {s += "2"}
注意AA []表示它接受一个数组(AA [])但不接受AA数组。 所以书中的答案是正确的。
PS: 在您的代码中,存在编译错误是正常的。由于您定义了sifter(BB ... b1)和sifter(BB [] b2),如果将BB数组作为参数传递,编译器无法确定选择哪一个。