2015-08-16 65 views
2
class X { 
    int x1, x2, x3; 
} 

class Y extends X { 
    int y1; 

    Y() { 
     x1 = 1; 
     x2 = 2; 
     y1 = 10; 
    } 
} 

public class Test { 
    public static void main(String[] args) { 
     Y y = new Y(); 
     System.out.println(y.x1 + "," + y.x2 + "," + y.x3 + "," + y.y1); 
    } 
} 

哪個構造函數初始化變量x3?哪個構造函數初始化變量x3?

  1. 默認類的構造函數X
  2. 默認Object
+0

您怎麼看?爲什麼? – Pshemo

+0

x3未實例化 –

+0

@AlexandruSeverin字段總是被初始化,但並非總是與默認值不同。 – Pshemo

回答

4

變量X3的構造函數永遠不會被你的任何構造函數來設置。 (你的構造函數== Y())。它也不由對象構造函數設置,因爲它看不到字段

它將在運行時被虛擬機設置爲0。這種行爲是通過這種方式來刪除多餘的init代碼。 請參閱:http://www.javapractices.com/topic/TopicAction.do?Id=14

0

您將看到其默認值。

爲Y延伸X,所以當你執行新Y(),最終會調用X的無參數的構造函數(即一個超類)。構造函數X在調用時會將類的狀態初始化爲默認值。