在回答這個問題之前,我們可以先來看下面一段代碼(父類里面有參數的構造方法方法體省略):
class
Pen {
public
Pen(){}
public
Pen(String
newColor
,
double
newLength
,
double
newPrice
){
.............................;
.............................;
}
}
class
Pencile
extends
Pen{
public
static
int
count
=0;
public
Pencile(){
count
++;
}
public
int
GetCount(){
return
count
;
}
public
class
Test {
public
static
void
main(String[]
args
){
Pencile
A
=
new
Pencile();
Pencile
B
=
new
Pencile();
System.
out
.println(
"共創建了"
+
A
.GetCount()+
"個實例!"
);
}
}
這段代碼的結果應該是:共創建了2個實例!,這個結果是不難想象的,但是如果這段代碼我們把“public Pen(){}”這段無參的構造函數注釋掉的話,那么這個程序就會出現問題了。但是如果我們不但注釋掉“public Pen(){}”,同樣的我們也注釋掉“
public Pen(String newColor,
double newLength,
double newPrice){}”這樣的有參數的構造函數,那么這個程序又能執行了,而且輸出同樣的結果。為什么會出現這樣的問題呢?這就自然引出了我們以下的這個問題:
java
中只要調用子類的構造函數就要調用父類無參數的構造函數嗎?若父類中不存在無參數構造函數會出錯嗎?
答:Java中只要調用子類的構造函數就一定會調用父類的構造函數,這是毋庸置疑的!有時我們並沒有在父類中寫有參和無參的構造方法,但是這樣我們在定義子類對象時調用子類構造函數時,其實也調用父類的構造函數,這是系統自動為我們添加的“public Pen(){}”。但是如果我們在父類中已經自己定義了有參的構造方法,卻沒有定義無參的構造方法,那么此時系統是不會為我們自動添加無參的構造方法的,此時程序結果就會提醒你父類沒有無參的構造方法,程序就會報錯。
以上是一個java初學者對目前自己寫程序的一點小的總結,希望大家能多多給點意見,參與討論!