標籤:
建構函式 ,是一種特殊的方法。主要用來在建立對象時初始化對象, 即為對象成員變數賦初始值,總與new運算子一起使用在建立對象的語句中。特別的一個類可以有多個建構函式 ,可根據其參數個數的不同或參數類型的不同來區分它們,即建構函式的重載。
一, 建構函式的特點:
- 建構函式的主要作用是完成對象的初始化工作,(如果寫的類裡面沒有建構函式,那麼編譯器會預設加上一個無參數且方法體為空白的建構函式).它能夠把定義對象時的參數傳給對象的域。意即當建立一個對象時,這個對象就被初始化.如果這時建構函式不為空白,則會在建立對象時就執行建構函式裡面的代碼:
- 建構函式的名稱必須與類名相同,包括大小寫;
- 建構函式沒有傳回值,也不能用void修飾. 如果不小心給建構函式前面添加了傳回值類型,那麼這將使這個建構函式變成一個普通的方法,在運行時將產生找不到構造方法的錯誤。
- 一個類可以定義多個構造方法,如果在定義類時沒有定義構造方法,則編譯系統會自動插入一個無參數的預設構造器,這個構造器不執行任何代碼。
- 構造方法可以重載,以參數的個數,類型,順序。
二, 建構函式的作用
- 首先,建構函式用來產生並初始化對象
- 建構函式可以通過函數的重寫給對象賦初始值,簡化代碼,比如:
這段代碼裡建立了兩個Person對象,分別賦給了初始值.但如果建立的對象比較多的話,代碼就顯的很重複.這時可以重載Person類裡面的構造方法,以在建立對象的時候就賦給它們初始值,這樣就可以省去重複的代碼:
這裡有一個問題需要特別注意:預設情況下,一個類會有一個預設的建構函式,這個建構函式沒有內容也沒有傳回值,一般都回略去不寫.這種情況下,編譯器在編譯的時候會預設加上一個無參且方法體為空白的建構函式.但是,如果類的建構函式被重寫了,如上例,Person類已經有了一個有參數有方法體的建構函式,這時編譯器就不會再給它預設加上一個無參且方法體為空白的建構函式.可以理解為無參的建構函式被覆蓋了.這種情況稱為沒有預設建構函式.
而在函數的繼承裡,子類必須調用父類的建構函式。但是,子類只能繼承父類的預設建構函式,如果父類沒有預設的建構函式,那子類不能從父類繼承預設建構函式.這時子類必須使用super來實現對父類的非預設建構函式的調用.
在建立對象時,先調用父類預設建構函式對對象進行初始化,然後調用子類自身自己定義的建構函式。
Java裡的建構函式(構造方法)