在回答这个问题之前,我们可以先来看下面一段代码(父类里面有参数的构造方法方法体省略):
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初学者对目前自己写程序的一点小的总结,希望大家能多多给点意见,参与讨论!