java代碼:

  class Person

  public Person

  }

  class Student extends Person

  public Student

  public Student

  }

  class Test

  }

  /

  =======================================

  輸出如下:

  E:“JavaWorkjava Test

  st1:

  person無參數構造函數

  student 無參數的構造函數

  ---------------------------

  st2:

  person無參數構造函數

  student 3 參數的構造函數

  ---------------------------

  st3:

  person 2 參數的構造函數

  student 4 參數的構造函數,super.

  說明了創建一個子類的對象實例的時候,必先調用父類的無參數的構造函數(默認構造函數),假如父類有帶參數的構造函數,那么系統將不會給它創建無參數的構造函數,這時,子類在實例化的時候,因為找不到父類的默認構造函數,編譯器將會報錯,但假如在子類的構造函數中指定用父類的帶參數的構造函數的時候,或者在父類中加一個無參數的構造函數,就不會報錯。

  =============================================

  我們假設A是B的父類,B是A的子類。

  1、假如程序員沒有給類A沒有提供構造函數,則編譯器會自動提供一個默認的無參數的構造函數,假如用戶提供了自己的構造函數,則編譯器就不在提供默認的無參數構造函數。

  2、子類B實例化時會自動調用父類A的默認構造函數,所以假如A的默認的無參數的構造函數為private,則編譯器會報錯,而假如A沒有提供默認的無參數的構造函數,而提供了其他類型的構造函數,編譯器同樣會報錯,因為B找不到A的默認無參數構造函數。所以,我們最好給父類A提供一個無參數的構造函數。

  3、或者在B的構造函數中顯示的調用父類A的有參構造函數。