上面的代碼是我們在使用繼承時,子類和父類的構造函數的寫法。構造方法能否被繼承,我覺得應該這樣理解: 父類是對子類的抽象,也就是說父類和子類可以合併寫成一個類,合併後的類寫出來的構造函數,不僅會包含子類的構造函數的內容,還會包含父類的構造函數的內容,所以我覺得這裡不能看成是子類繼承父類的構造函數,看成 ...
1 public class Test : Test2//子類 2 { 3 public Test():base() 4 { 5 } 6 7 public Test(int a) : base(a)//將子類構造函數的參數傳給父類的構造函數 8 { 9 //..... 10 } 11 12 } 13 14 public class Test2//父類 15 { 16 public int a; 17 18 public Test2() 19 { 20 } 21 22 public Test2(int a) 23 { 24 //..... 25 } 26 }
上面的代碼是我們在使用繼承時,子類和父類的構造函數的寫法。構造方法能否被繼承,我覺得應該這樣理解:
父類是對子類的抽象,也就是說父類和子類可以合併寫成一個類,合併後的類寫出來的構造函數,不僅會包含子類的構造函數的內容,還會包含父類的構造函數的內容,所以我覺得這裡不能看成是子類繼承父類的構造函數,看成是子類調用父類的構造函數應該更合理一些。在繼承之後,子類在實例化時,會先調用父類的構造函數,再調用自己的構造函數,和我們不用繼承,合併寫成一個類的構造函數有異曲同工之妙。所以子類不能繼承父類的構造函數。
繼承中的構造方法一些特殊規定:
子類的構造方法中必須調用父類的構造方法,且將父類的構造方法寫在子類構造方法體的第一行。
若子類構造方法沒有顯示地調用父類的構造方法,則系統預設調用父類中無參數的構造方法。