標籤:
1 /* 2 如果父類沒有無參構造方法,那麼子類的構造方法會出現什麼現象呢? 3 報錯。 4 如何解決呢? 5 A:在父類中加一個無參構造方法 6 B:通過使用super關鍵字去顯示的調用父類的帶參構造方法 7 C:子類通過this去調用本類的其他構造方法 8 子類中一定要有一個去訪問了父類的構造方法,否則父類資料就沒有初始化。 9 10 注意事項:11 this(...)或者super(...)必須出現在第一條語句上。12 如果不是放在第一條語句上,就可能對父類的資料進行了多次初始化,所以必須放在第一條語句上。13 */14 class Father {15 /*16 public Father() {17 System.out.println("Father的無參構造方法");18 }19 */20 //如果沒有寫構造方法,預設有無參構造,這裡寫了帶參構造,無參構造變成了帶參構造21 public Father(String name) {22 System.out.println("Father的帶參構造方法");23 }24 }25 26 class Son extends Father {27 public Son() {28 super("隨便給");29 System.out.println("Son的無參構造方法");30 //super("隨便給");31 }32 33 public Son(String name) {34 //super("隨便給");35 this();36 System.out.println("Son的帶參構造方法");37 }38 }39 40 class ExtendsDemo7 {41 public static void main(String[] args) {42 Son s = new Son();43 System.out.println("----------------");44 Son ss = new Son("林青霞");45 }46 }
這裡子類son建立對象的時候,無論它使用無參構造和帶參構造,即無論使用new Son(),new Son("林青霞"),這裡這些構造方法中預設第一條語句是必須隱式預設是super(),也就是父類的無參構造方法,利用父類的無參建構函式去初始化父類攜帶的資料,從而提供給子類Son使用。通常父類如果不寫構造的話,系統預設父類為無參構造,但是如果父類寫了帶參構造,那麼無參構造就會覆蓋掉,這樣父類Father()也就沒有無參構造了,這樣的話前面Son()建立對象時候就會出錯。但是也可以顯式利用super("name"),調用父類帶參構造初始化
Android(java)學習筆記119:繼承中父類沒有無參構造