class Human3{ public Human3(){ System.out.println("構造一個人"); } } class Pupil3 extends Human3{ public Pupil3(){ // super(); //本句註釋與不註釋執行結果是一樣的 System.out.println("構造了一個學生 "); } } public class Example3 { public static void main(String[] args) { // TODO Auto-generated method stub Pupil3 pupil3=new Pupil3(); } }
運行結果:
表明,子類構造方法會默認調用父類的構造方法,對於無參的父類構造方法,寫不寫super()輸出結果是一樣的。
1 class Human3 { 2 3 private String name; 4 private int age; 5 6 public Human3(String name) { 7 super(); 8 this.name = name; 9 System.out.println("構造一個人"); 10 } 11 12 } 13 14 class Pupil3 extends Human3 { 15 private String ID; 16 private String name; 17 private int age; 18 19 public Pupil3(String name, String iD, int age) { 20 super(name); 21 ID = iD; 22 this.age = age; 23 System.out.println("構造一個小學生"); 24 } 25 26 } 27 28 public class Example3 { 29 30 public static void main(String[] args) { 31 // TODO Auto-generated method stub 32 Pupil3 pupil3 = new Pupil3("張三", "p123", 10); 33 } 34 }
運行結果
3.此時如果註釋掉super方法就會報錯。
報錯原因:子類必須繼承父類的構造方法,如果父類構造方法中沒有參數傳遞,那麼默認是不寫super()繼承父類的構造方法的。
Human3類的構造方法沒有無參數的構造方法,所以,必須繼承父類有參數的構造方法,所以,必須寫super關鍵字來繼承父類的有參數的構造方法。
super.父類字段名
super.父類方法名(可選實參表)
對象名.方法名(實參表)
對象名.字段名