2014-02-08 2 views
0

, пожалуйста, помогите мне разобраться в проблемах. Потому что мой ответ становится отличным от ответа Kathie siera. Для нижеприведенного кода я получаю ошибку компиляции из-за повторной ссылки на sifter (BB. Но в книга ответ «-434»SCJP6 var arg issue от Kathie siera

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

Я проверил книгу, аргументы в пользу первых двух функций не АА или ВВ, представляет собой массив АА или ВВ: это должно быть так:

static void sifter(AA[] ... a2) {s += "1"} 
static void sifter(BB[] ... b1) {s += "2"} 

Внимание, что AA [] означает, что это accep ts массив массива (AA []), но не массив AA. Итак, ответ в книге верен.

PS: В вашем коде это нормально, что есть ошибка компиляции. Поскольку вы определяете как ситтер (BB ... b1), так и сифтер (BB [] b2), компилятор не может определить, какой из них выбрать, если вы передадите массив BB в качестве аргумента.