1. 靜態變量的初始化
輸出結果爲-2.8和17.2
2. 訪問子類對象
public class Base {
private int i = 2;
public Base() {
System.out.println(this.i);// 2
this.display();// 0
System.out.println(this.getClass());// Derived
// this的編譯類型是Base,無法調用子類的sub()方法
// this.sub();
}
public void display() {
System.out.println(i);
}
}
Java對象是由構造器構造的嗎?實際上,構造器只是負責對Java對象實例變量執行賦值,在執行構造器之前,該對象所佔的內存已經被分配出來了。
由於實例變量經過編譯後會被提取到構造器中,故Base的構造器的第一行代碼其實爲 i=2;
(在下面第4點裏面有解釋)
3. 調用被子類重寫的方法
4. 繼承成員變量與繼承方法的區別
5. final “宏變量”
在上面第1點中,若將staitc double initPrice用final修飾,兩處都會輸出17.2:
再看一個例子
將str1、str2用final修飾即可
注:以上內容摘自《瘋狂java程序員的基本修養-李剛》