JAVA繼承中的構造器調用

關於繼承中的構造器調用和調用順序,做了個小測試,如下:

class People {
 String name;
 
 //2,第二步,調用此無參構造器
 public People() {
  System.out.println("、父類的無參構造器");
 }
 
 //5,調用此有參構造器
 public People(String name) {
  System.out.println("、父類的有參構造器");
  this.name = name;
 }

}

class Child extends People {
 People father;
 
 public Child() {
  System.out.println("、子類的無參構造器");
 }
 
 //3,創建使歷史傳遞了參數"mike",所以第三步會調用子類有參構造器
 public Child(String name) {
  System.out.println("、子類的有參構造器");
  this.name = name;
  
  //4,此處創建了People的實例並傳遞了參數,所以會調用父類有參構造器
  father = new People(name + ":F");
 }

 public static void main(String[] args) {
  System.out.println("子類創建實例時的構造函數調用順序:");
  new Child("mike");//1,創建子類實例,由於Child類沒有顯示調用People的構造器,所以默認調用People的無參構造器
  
//  new Child();//不傳遞參數,則第一步調用父類無參構造器,然後調用自身的無參構造器。
 }
}

當前狀態下執行main方法,輸出如下內容:

子類創建實例時的構造函數調用順序:

、父類的無參構造器

、子類的有參構造器

、父類的有參構造器


若子類沒有顯示調用父類構造器,當子類創建實例時 ,會調用父類的無參構造器,若父類沒有無參構造器,則會報錯。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章