構造函數 ,是一種特殊的方法。主要用來在創建對象時初始化對象, 即為對象成員變量賦初始值,總與new運算符一起使用在創建對象的語句中。特別的一個類可以有多個構造函數 ,可根據其參數個數的不同或參數類型的不同來區分它們,即構造函數的重載。
一, 構造函數的特點:
- 構造函數的主要作用是完成對象的初始化工作,(如果寫的類里面沒有構造函數,那么編譯器會默認加上一個無參數且方法體為空的構造函數).它能夠把定義對象時的參數傳給對象的域。意即當創建一個對象時,這個對象就被初始化.如果這時構造函數不為空,則會在創建對象時就執行構造函數里面的代碼:

- 構造函數的名稱必須與類名相同,包括大小寫;
- 構造函數沒有返回值,也不能用void修飾. 如果不小心給構造函數前面添加了返回值類型,那么這將使這個構造函數變成一個普通的方法,在運行時將產生找不到構造方法的錯誤。
- 一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的默認構造器,這個構造器不執行任何代碼。
- 構造方法可以重載,以參數的個數,類型,順序。
二, 構造函數的作用
- 首先,構造函數用來生成並初始化對象
- 構造函數可以通過函數的重寫給對象賦初始值,簡化代碼,比如:

這段代碼里創建了兩個Person對象,分別賦給了初始值.但如果創建的對象比較多的話,代碼就顯的很重復.這時可以重載Person類里面的構造方法,以在創建對象的時候就賦給它們初始值,這樣就可以省去重復的代碼:

這里有一個問題需要特別注意:默認情況下,一個類會有一個默認的構造函數,這個構造函數沒有內容也沒有返回值,一般都回略去不寫.這種情況下,編譯器在編譯的時候會默認加上一個無參且方法體為空的構造函數.但是,如果類的構造函數被重寫了,如上例,Person類已經有了一個有參數有方法體的構造函數,這時編譯器就不會再給它默認加上一個無參且方法體為空的構造函數.可以理解為無參的構造函數被覆蓋了.這種情況稱為沒有默認構造函數.
而在函數的繼承里,子類必須調用父類的構造函數。但是,子類只能繼承父類的默認構造函數,如果父類沒有默認的構造函數,那子類不能從父類繼承默認構造函數.這時子類必須使用super來實現對父類的非默認構造函數的調用.
在創建對象時,先調用父類默認構造函數對對象進行初始化,然后調用子類自身自己定義的構造函數。
