先看**
package com.digisky.ex;
/** * 父類
* * @author jason yang
* @version 1.0 2014-8-4下午10:18:13
*/public abstract class f
public abstract void setid(int id);
public abstract void setname(string id);
}
大家認為最後的列印結果是多少呢?package com.digisky.ex;
/** * 子類
* * @author jason yang
* @version 1.0 2014-8-4下午10:18:09
*/public class s extends f
public string getname()
public void setname(string name)
@override
public void setid(int id)
public static void main(string args)
}
最後打列印結果是
id=1
name=子類
我的預期是1和父類,因為父類呼叫後把子類初始化的name覆蓋了,結果我錯了。
最總發現如果子類有初始化值,子類會把父類之前設定的值覆蓋,然後id並沒有進行覆蓋(如果id初始化為0的話)
各位大神多多指導,這件事情說明我繼承等底層知識還不夠好啊。。。
類初始化順序執行結果
以下程式執行結果是 class y x x new x static static int i 11 static class x static static int i 1 static public class z extends y public z x x new x static stat...
類初始化順序
類初始化時,jvm會先初始化所有 1,靜態屬性,靜態例項,靜態塊。2.新建例項 靜態或非靜態 時會先執行所有非靜態屬性和構造塊 非靜態屬性和構造塊執行級別相同,誰前誰先 然後構造方法。注意 1 靜態 塊不能存在於任何方法體內。2 靜態 塊不能直接訪問靜態例項變數和例項方法,需要通過類的例項物件來訪問...
類初始化順序
類初始化順序 1.靜態構造塊最先執行,並只執行一次 2.成員變數執行,但靜態成員變數早於靜態塊執行 3.構造塊從上至下依次執行 4.構造方法執行 父類早於子類 父類靜態構造塊 子類靜態構造塊 父類成員變數 父類構造塊 父類構造方法 子類成員變數 子類構造塊 子類構造方法 靜態成員變數先於靜態塊執行 ...