在初始化類時,在父類方法中對子類變數賦值,之後走完父類構造方法後,在完成子類構造方法時,列印該變數仍為預設值。
由於初始化變數時,給了變數乙個預設值,載入順序為建構函式、變數,導致在建構函式中賦值後,載入變數時再次賦為預設值。
解決 方法:
1、不給變數預設值。
2、新增static關鍵子,讓變數優先與建構函式載入。
**:
public abstract class basepublic abstract void setinfo(int x);
}
public abstract class secondinfo extends base}
public class three extends secondinfo呼叫:@override
public void setinfo(int x)
}
three a = new three();列印:
this x setinfo : 5
this.x : 0
建構函式與static執行順序
2015年的第一篇,1 static靜態塊 jvm載入類時就會執行,而建構函式是你在例項化物件是才會執行。public class testutil public testutil public void ff public static void main string args 因此執行上面 的...
C 建構函式初始化變數的順序
在 c 中類的建構函式初始值列表 中提到,c 中類的建構函式初始值列表可以對類的成員進行初始化。但是需要注意的是,建構函式的初始化列表只是說明各變數的初始值,並沒有指定變數的初始化順序。其中,myclass類建構函式的初始化列表只是說明了變數i的初始值是1,變數j的初始值是i的值。但是並不一定是先初...
建構函式和變數初始化順序
class a 輸出 a 這一行和下一行是為了構造c類物件的基類b,而在構造基類b的時候需要先初始化b的成員變數a,因而呼叫了a的建構函式 b a 這一行和下一行是c類物件在初始化成員變數b時,需要構造b,因此需要先初始化b的成員變數a,因而再次呼叫了a的建構函式 b a 這一行是c類物件初始化成員...