对子类的实例化过程,自己回想了一下,并进行了实际测试,主要是为了弄清在初始化过程中,子类对父类构造函数的调用规则。
总结如下:
1.若父类中定义了不带参构造函数,子类是否定义都通过;
2.若父类中没有定义任何构造函数,子类中定义通过,否则不同过;
3.若父类中只定义了带参构造函数,子类中必须定义构造函数,且必须调用父类的带参构造函数,否则报错。
下面给出实例:
(这里只说明第3条)
class Fu
{
/*父类只定义了带参构造函数*/
Fu(int i)
{
System.out.println("fu"+i);
}
void show()
{
System.out.print("fu");
}
}
class Zi extends Fu
{
Zi()
{
//super(9);//当此句被注释后,报错
System.out.println("zi");
}
void show()
{
System.out.println("zi");
}
}
public class JiCheng
{
public static void main(String[] args)
{
Zi zi = new Zi();
}
}
此外,当父类中存在静态代码块和构造代码块时,子类初始化时它们也会被执行。
|
|