如果沒有this及super,則編譯器自動加上super(),即呼叫直接父類不帶引數的構造方法。任何子類必須先或顯示或隱式地呼叫直接父類的構造方法。
class
constructcallthisandsuper
}class
person
person( string name, int age )
}class
student
extends
person
student( string name, int age, string school )
}class
graduate
extends
student
}-----------output-----------
in person(string,int)
in student(string,int,string)
in student()
in graduate()
- 必須所有父類的構造都必須得到呼叫,否則整個物件的構建就可能不正確。
classa;}
class
bextends
a // 編譯不通過,提示構造構造方法不存在
}
- 編譯出錯是因為,在類b中的構造方法沒有`this`及`super`,因此編譯器會自動呼叫父類的構造方法,即`b(string a)`,但是類a中由於已經顯示地宣告了乙個構造方法`a(int)`,因此系統就不會在生產預設的構造方法`a()`,所以編譯出錯。解決方法:
1. 在類b的構造方法中,加入`super(3)`
2. 在a中加入乙個不帶引數的構造方法`a(){}`
3. 去掉a中全部的構造方法,則compiler會自動加入乙個不帶引數的構造方法。
靜態初始化(static initializers)
class
initialtest
int n=10; //step2
static
int x;
static
}class
initialtest2
extends
initialtest
int a;
static
}-----------output-----------
static...1
static2...2
initialtest...11
initialtest2...0
this.a=6
[finished in 1.4s]
JAVA學習(物件構造與初始化)
物件都有構造方法,如果沒有的話,編譯器會自動加乙個default構造方法 不帶任何引數 但如果有了構造方法,編譯器不會加上default構造方法。我們的任何乙個物件,都需要通過constructor構造。這裡還有乙個值得注意的點,抽象類也可以有構造方法,只是不能通過構造方法例項化乙個物件。這個構造方...
java中物件的初始化與構造器
例子 乙個天體資料類 class body 可以做天體物件的建立與初始化 body sun new body sun.idnum body.nextid sun.name sol sun.orbits null body earth new body earth.idnum body.nextid ...
物件構造和初始化
1 構造方法 物件都有構造方法,如果沒有,則新增乙個default方法 抽象類有構造方法 2 呼叫本類和父類 this 本類其他 super父類 父類所有構造方法都得到呼叫 例 classa class bextends a 不能通過編譯 1.class a a int a 2.classa3.cl...