java代碼:

  class Person

  public Person

  }

  class Student extends Person

  public Student

  public Student

  }

  class Test

  }

  /

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

  輸出如下:

  E:“JavaWorkjava Test

  st1:

  person無參數(shù)構(gòu)造函數(shù)

  student 無參數(shù)的構(gòu)造函數(shù)

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

  st2:

  person無參數(shù)構(gòu)造函數(shù)

  student 3 參數(shù)的構(gòu)造函數(shù)

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

  st3:

  person 2 參數(shù)的構(gòu)造函數(shù)

  student 4 參數(shù)的構(gòu)造函數(shù),super.

  說明了創(chuàng)建一個(gè)子類的對(duì)象實(shí)例的時(shí)候,必先調(diào)用父類的無參數(shù)的構(gòu)造函數(shù)(默認(rèn)構(gòu)造函數(shù)),假如父類有帶參數(shù)的構(gòu)造函數(shù),那么系統(tǒng)將不會(huì)給它創(chuàng)建無參數(shù)的構(gòu)造函數(shù),這時(shí),子類在實(shí)例化的時(shí)候,因?yàn)檎也坏礁割惖哪J(rèn)構(gòu)造函數(shù),編譯器將會(huì)報(bào)錯(cuò),但假如在子類的構(gòu)造函數(shù)中指定用父類的帶參數(shù)的構(gòu)造函數(shù)的時(shí)候,或者在父類中加一個(gè)無參數(shù)的構(gòu)造函數(shù),就不會(huì)報(bào)錯(cuò)。

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

  我們假設(shè)A是B的父類,B是A的子類。

  1、假如程序員沒有給類A沒有提供構(gòu)造函數(shù),則編譯器會(huì)自動(dòng)提供一個(gè)默認(rèn)的無參數(shù)的構(gòu)造函數(shù),假如用戶提供了自己的構(gòu)造函數(shù),則編譯器就不在提供默認(rèn)的無參數(shù)構(gòu)造函數(shù)。

  2、子類B實(shí)例化時(shí)會(huì)自動(dòng)調(diào)用父類A的默認(rèn)構(gòu)造函數(shù),所以假如A的默認(rèn)的無參數(shù)的構(gòu)造函數(shù)為private,則編譯器會(huì)報(bào)錯(cuò),而假如A沒有提供默認(rèn)的無參數(shù)的構(gòu)造函數(shù),而提供了其他類型的構(gòu)造函數(shù),編譯器同樣會(huì)報(bào)錯(cuò),因?yàn)锽找不到A的默認(rèn)無參數(shù)構(gòu)造函數(shù)。所以,我們最好給父類A提供一個(gè)無參數(shù)的構(gòu)造函數(shù)。

  3、或者在B的構(gòu)造函數(shù)中顯示的調(diào)用父類A的有參構(gòu)造函數(shù)。