来自Kathie sierra的SCJP 6 var arg问题

时间:2014-02-08 17:12:55

标签: scjp

请帮我解决问题。因为我的答案与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"; 
    }

}

1 个答案:

答案 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数组作为参数传递,编译器无法确定选择哪一个。