Java 父類建構函式中呼叫子類重寫的方法
阿新 • • 發佈:2019-02-06
參考文章
看一段程式碼:
public class main_class {
public static void main(String[] args){
new c2();
}
}
class c1{
String name="aaaaaa";
//父類建構函式
public c1(){
print();
}
//該建構函式自始至終就沒有被呼叫過
public void print(){
System.out.println(name);
}
}
class c2 extends c1{
String name="asdg" ;
//建構函式:
public c2(){
System.out.println(name);
}
//重寫父類中的print()函式
public void print(){
System.out.println(name);
}
}
輸出:
null
asdg
分析:
1.初始化c2()時,先初始化c2的父類:c1()
初始化c1()的靜態變數和靜態程式碼塊
初始化c2()的靜態變數和靜態程式碼塊
2.初始化c1()的非靜態變數,初始化父類的建構函式。
如果父類的建構函式中呼叫的方法被子類重寫,那麼呼叫的會是子類的方法。
3.初始化c2() 的非靜態變數,初始化子類的建構函式。