2011-10-12 90 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.