Java中,一個子類擴展它的父類。當(dāng)創(chuàng)建一個子類對象時,它會調(diào)用父類構(gòu)造函數(shù)和子類構(gòu)造函數(shù)。那么它們的執(zhí)行順序是怎樣的呢?
public class Parent { public Parent() { System.out.println("Parent Constructor"); } } public class Child extends Parent { public Child() { System.out.println("Child Constructor"); } } public class Test { public static void main(String[] args) { Child child = new Child(); } }
以上代碼會輸出以下結(jié)果:
Parent Constructor Child Constructor
可以看到,父類構(gòu)造函數(shù)先于子類構(gòu)造函數(shù)執(zhí)行。
如果子類構(gòu)造函數(shù)中沒有顯式調(diào)用父類構(gòu)造函數(shù),Java會默認(rèn)調(diào)用父類的無參構(gòu)造函數(shù)。如果父類只有有參構(gòu)造函數(shù),則子類必須顯式調(diào)用父類的有參構(gòu)造函數(shù)。
public class Parent { public Parent(int num) { System.out.println("Parent Constructor With Parameter: " + num); } } public class Child extends Parent { public Child() { super(10); // 顯式調(diào)用父類有參構(gòu)造函數(shù) System.out.println("Child Constructor"); } } public class Test { public static void main(String[] args) { Child child = new Child(); } }
以上代碼會輸出以下結(jié)果:
Parent Constructor With Parameter: 10 Child Constructor
可以看到,顯式調(diào)用了父類的有參構(gòu)造函數(shù)之后,父類構(gòu)造函數(shù)先于子類構(gòu)造函數(shù)執(zhí)行。
下一篇ios和java工資