首先引入一个传智播客视频中的例子来帮助理解和记忆
eg
class Fu
{
Fu()
{
System.out.println("fu run");
}
}
class Zi extends Fu
{
Zi()
{
System.out.println("zi run");
}
}
class ExtendsDemo3
{
public static void main(String []args)
{
Zi z=new Zi();
}
}
打印结果为:fu show; zi show;
为什么呢?
因为在子类构造函数的第一行,有一个隐式的语句:super();
这句话是用于调用父类中那个空参数的构造函数,如果父类中只有空参数的构造函数就调用那个,如果没有构造函数,也会调用系统默认的加上的空参数构造函数,只是这个不会有任何的显示内容
当父类中的构造函数全非空时,那么一定要在第一行手动的加入这个调用,即super(参数列表)或者this语句来访问父类中的指定构造函数
为什么要加在第一行呢?因为初始化要最先完成,如果放在后面,先执行子类的初始化,如果父类也做了初始化动作,那么会把子类的初始化覆盖,就没有任何意义了
总之,就是在子类中一定要访问父类中的构造函数