2014-02-08 18 views
0

請幫我解決這個問題。因爲我的答案從Kathie siera書中得到了不同的答案。對於下面的代碼,我得到編譯錯誤,因爲重新聲明到sifter(BB。 但是在本書的答案是「-434」SCJP6 var arg問題來自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

我查過書,前兩個函數的參數是不是AA或BB,是AA或BB的數組: 它應該是這樣的:

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

注意AA []表示它接受ts數組數組(AA []),但不是AA數組。 所以書中的答案是正確的。

PS: 在您的代碼中,存在編譯錯誤是很正常的。既然您定義了篩選器(BB ... b1)和篩選器(BB [] b2),如果您傳遞一個BB數組作爲參數,編譯器無法確定選擇哪一個篩選器。