2010-07-14 57 views
0

考慮:Java的SCJP問題

class Building { 
    Building() { 
     System.out.print("b "); 
    } 
    Building(String name) { 
     this(); 
     System.out.print("bn "+name); 
    } 
} 
public class House extends Building { 
    House() { 
     System.out.print("h "); 
    } 
    House(String name) { 
     this(); 
     System.out.print("hn "+name); 
    } 
    public static void main(String a[]) { 
     new House("x "); 
    } 
} 

對於上述計劃,我想輸出必須爲h HN X。但輸出結果爲b h hn x。

爲什麼?

後來

public class TestDays { 

    public enum Days { 
     MON,TUE,WED 
    }; 
    public static void main(String []args) { 

     for(Days d : Days.values()) 
     ; 
     Days [] d2=Days.values(); 
     System.out.println(d2[2]); 

    } 

} 

我不明白上面的程序。請幫幫我。

class Mammal { 

    String name="furry"; 
    String makeNoise() { 
     return "generic noise"; 
    } 

} 

class Zebra extends Mammal { 

    String name="stripes"; 
    String makeNoise() { 
     return "bray"; 
    } 

} 
public class ZooKeeper { 

    public static void main(String args[]) { 
     new ZooKeeper().go(); 
    } 
    void go() { 

     Mammal m=new Zebra(); 
     System.out.println(m.name+m.makeNoise()); 

    } 

} 

在上面的程序中,makeNoise()被覆蓋。所以輸出必須是條紋布拉。但產量是毛茸茸的。

+2

你一次問了三個無關聯的問題。這使得他們回答凌亂。今後,將每個問題作爲一個單獨的SO問題提出。 – 2010-07-14 03:09:49

回答

3

問題1:

我想輸出必須爲h HN X。但輸出結果爲b h hn x。

你缺少的House()構造隱含調用的Building的無參數的構造函數的事實。

問題2:

我無法理解上面的程序。請幫幫我。

它正在打印枚舉的第3個值。空的for-loop看起來有點奇怪,但我懷疑這只是一個打字錯誤。如果還有別的東西你不明白,你就得說出它是什麼。 (我離開了我的讀心頭盔在家裏......和喬恩斯基特是睡着了。)

問題3:

在上面的程序,makeNoise()被覆蓋。所以輸出必須是條紋布拉。但產量是毛茸茸的。

你看到的不是「條紋」「毛茸茸」的原因是,屬性一類的覆蓋。一個Zebra實例實際上有兩個名爲name的字段,並且您的代碼根據引用變量的聲明類型綁定到一個或另一個。在這種情況下,m的聲明類型是Mammal,因此您正在獲取名稱的哺乳動物版本。

2

1。 - B出現首先是因爲這樣的代碼:

House() { 
    System.out.print("h "); 
} 

首先調用超類的無參數的構造函數(這是由編譯器完成),所以你應該想想是:

House() { 
    super(); 
    System.out.print("h "); 
} 

2- Your're聲明一個Java enum

的for循環遍歷所有可能的值(週一,週二,週三)

for(Days d : Days.values()) 
    ; 

但是,它沒有做任何事情(見;這意味着「無」)

然後,創建一個具有這些值的陣列

Days [] d2=Days.values(); 

爲了最終打印第三位置(在Java數組是從零開始,因此0-1-2是第三位置)

System.out.println(d2[2]); 

它打印WED

3.-見Stephen C答案。你正在獲得超類的屬性。