1. 默認(rèn)構(gòu)造方法:

  默認(rèn)構(gòu)造方法是沒(méi)有參數(shù)的構(gòu)造方法,可以簡(jiǎn)單的分為兩種:

  (1) 隱含的默認(rèn)構(gòu)造方法

  (2) 程序顯式定義的構(gòu)造方法

  在java語(yǔ)言中,每個(gè)類至少有一個(gè)構(gòu)造方法,為了保證這一點(diǎn),如果用戶定義的類中沒(méi)有構(gòu)造方法,那么java語(yǔ)言將自動(dòng)提供一個(gè)隱含的默認(rèn)構(gòu)造方法,該構(gòu)造方法沒(méi)有參數(shù),用public修飾,沒(méi)有返回值,并且方法體為空,例如:

  public ClassName(){}

  當(dāng)然在程序中也可以明確的定義默認(rèn)構(gòu)造方法,

  如果在類中定義了一個(gè)或者多個(gè)構(gòu)造方法,并且所有的構(gòu)造方法都有參數(shù),這個(gè)類就失去了默認(rèn)的構(gòu)造方法。如果想保留默認(rèn)的構(gòu)造方法,必須顯式的定義出來(lái)。例如:

  public class Test(){

  public Test(String name){System.out.println(name);};

  public Test(int age){System.out.println(age);}

  } 對(duì)于這個(gè)類,如果要定義一個(gè)對(duì)象Test test = new Test();這個(gè)就是錯(cuò)誤的,因?yàn)闆](méi)有這個(gè)構(gòu)造方法,如果想這樣定義,必須顯式的定義默認(rèn)構(gòu)造方法。

  2. 子類調(diào)用父類的構(gòu)造函數(shù)

  父類的構(gòu)造函數(shù)不能被子類繼承,但是在子類對(duì)象被創(chuàng)建時(shí),如果不顯式調(diào)用父類的構(gòu)造方法,這是子類會(huì)調(diào)用父類的默認(rèn)構(gòu)造方法。如果要調(diào)用父類的其他構(gòu)造方法(帶參構(gòu)造方法),必須出使用super顯式的指

  使用super必須遵循一下規(guī)則:

  (1) 在子類的構(gòu)造方法中不能直接使用父類的構(gòu)造方法名稱直接調(diào)用,而必須使用super語(yǔ)句

  (2) 如果在子類的構(gòu)造方法中時(shí)用super調(diào)用父類的構(gòu)造方法,他必須作為構(gòu)造方法的第一條語(yǔ)句出現(xiàn)。

  總結(jié)

  在創(chuàng)建子類的對(duì)象時(shí),java虛擬機(jī)首先執(zhí)行父類的構(gòu)造方法,然后再執(zhí)行子類的構(gòu)造方法,在多重繼承的情況下,將從最頂層的類的構(gòu)造方法開(kāi)始執(zhí)行,然后依次執(zhí)行各個(gè)類的構(gòu)造方法。