JAVA-構造器
阿新 • • 發佈:2018-12-31
構造器
用於建立物件並初始化物件屬性的方法,叫“構造方法”,也叫“構造器”;構造器在類中定義。
- 構造器的名稱必須與類名同名,包括大小寫。
- 構造器沒有返回值,但也不能寫void,也不能寫return。
- 構造器的引數:一般是初始化物件的前提條件。
- 用new呼叫!且物件一建立,構造器就執行且僅執行一次。一般方法可被呼叫多次。
- 類一定有構造器!這是真的,不需要質疑!
- 如果類沒有宣告(定義)任何的構造器,Java編譯器會自動插入預設構造器!
- 預設構造是無引數,方法體是空的構造器,且預設構造器的訪問許可權隨著所屬類的訪問許可權變化而變化。如,若類被public修飾,則預設構造器也帶public修飾符。
- 預設構造器是看不到的,一旦自己寫上構造器則預設構造器就沒有了,自己寫的叫自定義構造器,即便自己寫的是空引數的構造器,也是自定義構造器,而不是預設構造器。
- 如果類聲明瞭構造器,Java編譯器將不再提供預設構造器。若沒手動寫出無參構造器,但卻呼叫了無參構造器,將會報錯!
- 構造器是可以過載的,過載的目的是為了使用方便,過載規則與方法過載規則相同。
- 構造器是不能繼承的!雖說是叫構造方法,但實際上它不是常說的一般方法。
- 子類繼承父類,那麼子型別構造器預設呼叫父型別的無引數構造器。
- 子類構造器一定要呼叫父類構造器,如果父類沒有無引數構造器,則必須使用super(有引數的),來呼叫父類有參的構造器。 那麼,為什麼子類一定要訪問父類的構造器?因為父類中的資料子類可以直接獲取。所以子類物件在建立時,需要先檢視父類是如何對這些資料進行初始化的,所以子類在物件初始化時,要先訪問一下父類中的構造器。總之,子類中至少會有一個構造器會訪問父類中的構造器,且子類中每一個建構函式內的第一行都有一句隱式super()。
- 注意事項:sper()、sper.和 this()、this.
- this:在執行期間,哪個物件在呼叫this所在的方法,this就代表哪個物件,隱含繫結到當前“這個物件”。
- super():呼叫父類無參構造器,一定在子類構造器第一行使用!如果沒有則是預設存在super()的!這是Java預設新增的super()。
- super.是訪問父類物件,父類物件的引用,與this.用法一致
- this():呼叫本類的其他構造器,按照引數呼叫構造器,必須在構造器中使用,必須在第一行使用,this() 與 super() 互斥,不能同時存在
- this.是訪問當前物件,本類物件的引用,在能區別例項變數和區域性變數時,this可省略,否則一定不能省!
- 如果子父類中出現非私有的同名成員變數時,子類要訪問本類中的變數用this. ;子類要訪問父類中的同名變數用super.
eg:預設構造器
public class Demo {
public static void main(String[] args) {
Foo foo = new Foo();//呼叫了javac自動新增的預設構造器!
//Koo koo = new Koo();//編譯錯誤,沒有Koo()構造器
Koo koo = new Koo(8);
}
}
class Foo { } //Foo有構造器,有無引數的預設構造器!
class Koo {
public Koo(int a) { //聲明瞭有引數構造器
System.out.println("Call Koo(int)");
}
}