關於繼承中的構造器調用和調用順序,做了個小測試,如下:
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方法,輸出如下內容:
子類創建實例時的構造函數調用順序:
、父類的無參構造器
、子類的有參構造器
、父類的有參構造器
若子類沒有顯示調用父類構造器,當子類創建實例時 ,會調用父類的無參構造器,若父類沒有無參構造器,則會報錯。