2011-10-12 82 views
0
class SuperclassA { 
    protected int superValue;        // (1) 
    SuperclassA() {          // (2) 
     System.out.println("Constructor in SuperclassA"); 
     this.doValue();         // (3) 
    } 
    void doValue() {          // (4) 
     this.superValue = 911; 
     System.out.println("superValue: " + this.superValue); 
    } 
} 

class SubclassB extends SuperclassA { 
    private int value = 800;        // (5) 
    SubclassB() {           // (6) 
     System.out.println("Constructor in SubclassB"); 
     this.doValue(); 
     System.out.println("superValue: " + this.superValue); 
    } 
    void doValue() {          // (7) 
     System.out.println("value: " + this.value); 
    } 
} 

public class Javaapp { 
    public static void main(String[] args) { 
     System.out.println("Creating an object of SubclassB."); 
     new SubclassB();         // (8) 
    } 
} 

爲什麼我的輸出:意想不到的輸出要求

Creating an object of SubclassB. 
Constructor in SuperclassA 
value: 0 
Constructor in SubclassB 
value: 800 
superValue: 0 

我想這應該是這樣的:

​​
+1

您是否嘗試過調試器?使用一個調試器,你可以在'new SubclassB();'行設置一個斷點,並且進入每一個函數調用並看到執行的順序。 –

回答

0

看到0第一個value輸出的原因是,value場初始化(它設置爲800)之前,不會只是之前SubclassB構造即將被稱爲運行。在構建SuperclassA(必須在子類構建之前發生)期間,在其單元化狀態中觀察到value,這是它的0.