子父類中的構造函數的特點:
1.在子類構造對象時,發現,訪問子類構造函數時,父類構造函數也運行了。
原因是:在子類的構造函數中第一行有一個默認的隱式語句。 super();
類似於this(); this();調用的是本類的構造函數
2.子類構造函數默認調用的是父類中的空參數構造函數,如果需要調用父類中帶參數的構造函數,可以在子類構造函數中定義。如:super(6);
3.如果父類中沒有定義空參數構造函數,那么子類的構造函數必須用super明確要調用父類中哪個構造函數。
4.同時子類構造函數中如果使用this調用了本類構造函數時,那么super就沒有了,因為super和this都只能定義第一行,所以只能有一個。但是可以保證的是,子類中肯定會有其他的構造函數訪問父類的構造函數。
5.Object是所有類的父類。
注意:supre語句必須要定義在子類構造函數的第一行。因為父類的初始化動作要先完成。
例:
1 class Fu 2 { 3 int num ; 4 Fu() 5 { 6 num =10; 7 System.out.println("A fu run"); 8 } 9 Fu(int x) 10 { 11 System.out.println("B fu run..."+x); 12 } 13 } 14 class Zi extends Fu 15 { 16 int num; 17 Zi() 18 { 19 //super();//調用的就是父類中的空參數的構造函數。 20 //類似於this() 調用的是本類的構造函數 21 22 System.out.println("C zi run"+num); 23 } 24 Zi(int x) 25 { 26 this(); 27 // super(x); //如果需要調用父類中帶參數的構造函數,可以在子類構造函數中定義。 28 System.out.println("D zi run "+x); 29 } 30 } 31 32 class ExtendsDemo4 33 { 34 public static void main(String[] args) 35 { 36 new Zi(6); 37 } 38 } 39 class Demo//extends Object //Object是所有類的父類 40 { 41 /* 42 43 Demo() 44 { 45 super(); 46 return; 47 } 48 */ 49 }