/*
子父类构造函数
构造函数没有覆盖,因为构造函数名与类名一致,而不同的类类名不同
为什么子类一定要访问父类中的构造函数
因为父类中的数据子类可以直接获得,所以对象建立时,需要先查看父类是如何对这些数据初始化的
所以子类在对象初始化时,要先访问父类中的构造函数
如果要访问父类中的指定的构造函数,可以通过手动定义super语句的方式指定
super一定要定义在子类构造函数第一行
结论
子类中所有构造函数默认都会访问父类中的空参数构造函数
因为子类每一个构造函数第一行都有一句隐式super();
当父类没有空参数构造函数时(定义了有参数构造函数),子类必须手动通过super语句形式来指定要访问父类中的构造函数
当然:子类的构造函数第一行也可以手动指定this语句访问本类中构造函数
子类中至少会有一个构造函数访问父类中的构造函数
*/
class Demo
{
public static void main(String []args)
{
Zi z= new Zi();
Zii zi=new Zii(4);
Ziii zii=new Ziii();
}
}
class Fu
{
Fu()//构造函数在对象一建立就执行
{
System.out.println("fu run");
}
}
class Zi extends Fu
{
Zi()
{
//super(); // 默认隐式语句 不写的话虚拟机帮忙加上。 表示调用父类空参数构造函数
System.out.println("zi run");
}
}
class Fuu
{
Fuu()
{
System.out.println("fuu run");
}
}
class Zii extends Fuu
{
/*
还是先访问父类中的空参数构造函数
*/
Zii(int x)
{
System.out.println("zii run");
}
}
class Fuuu
{
Fuuu(int x)
{
System.out.println("fuuu run");
}
}
class Ziii extends Fuuu
{
Ziii()
{
super(4);//访问父类中的有参数的构造函数,需要指定
System.out.println("ziii run");
}
} |
|