大部分內容轉自:http://tech.it168.com/j/2006-05-18/200605181021879.shtml
構造器是一個創建對象時被自動調用的特殊方法,為的是初始化。構造器的名稱應與類的名稱一致。
當創建一個個對象時,系統會該對象的屬性默認初始化,基本類型屬性的值為0(數值類型),false(布爾類型),把所有的引用類型設置為null.
構造器可以改變這種默認的初始化。
構造器的作用:是創建java對象的重要途徑,是不是說構造器完全負責創建java對象?
答:是創建java對象的重要途徑,通過new關鍵字調用構造器時,構造器也確實返回了該類的對象,但這個對象並不是完全由構造器負責創建的。
首先要注意的是Java的構造器並不是函數,所以他並不能被繼承,這在我們extends的時候寫子類的構造器時比較的常見,即使子類構造器參數和父類的完全一樣,我們也要寫super就是因為這個原因。
首先說一下Java在構造實例時的順序(不討論裝載類的過程)。
介紹一下准備知識,以備一會來詳細說明這個的流程。
this() 、super()是你如果想用傳入當前構造器中的參數 or 構造器中的數據調用其他構造器或者控制父類構造器時使用的,在一個構造器中你只能使用this()或者super()之中的一個,而且調用的位置只能在構造器的第一行,在子類中如果你希望調用父類的構造器來初始化父類的部分,那就用合適的參數來調用super(),如果你用沒有參數的super()來調用父類的構造器(同時也沒有使用this()來調用其他構造器),父類缺省的構造器會被調用,如果父類沒有缺省的構造器,那編譯器就會報一個錯誤。
注意此處,我們經常在繼承父類的時候構造器中並不寫和父類有關的內容,此時如果父類沒有缺省構造器,就會出現編譯器添加的缺省構造器給你添麻煩的問題了哦。
- public class Manager extends Employee {
- private String department;
- public Manager(String name, double salary, String dept)
- {
- super(name, salary);
- department = dept;
- }
- public Manager(String n, String dept) {
- super(name);
- department = dept;
- }
- public Manager(String dept) {
- // 這里就沒有super(),編譯器會自動地添加一個空參數的缺省super構造器,此時如果Employee類中沒有空參數的缺省構造器,那就會導致一個編譯錯誤
- department = d;
- }
- }