父类子类在初始化的是执行的流程
①子类构造器会隐式调用父类的无参构造方法,如果子类显式利用super调用了父类的有参构造函数,就不会再隐式调用无参构造函数了
②子类初始化顺序 :
父类静态代码块–子类静态代码块–父类非静态代码块–父类无参构造方法–子类非静态代码块–子类无参构造方法
父类静态代码块–子类静态代码块–父类非静态代码块–父类无参构造方法–子类非静态代码块–子类有参构造方法
下面对上面的结论利用实例解释一下
首先要了解的是
1.jdk会隐式的给类生成无参构造函数,如果已经定义了有参构造函数,就不会隐式的生成无参构造函数
2.子类初始化的时候(包含子类调用有参构造函数)会调用父类的无参构造函数,如果显式的利用super调用父类的有参构造函数,就不会再隐式的调用父类的无参构造函数
3.子类构造函数调用this或者super,都要放在代码的第一行
1.父类 有参构造 子类有参构造函数
父类,只有有参构造函数
public class Father {
public String name;
public Father(String name) {
this.name = name;
System.out.println ("Father的有参构造函数");
}
}
父类,无参构造函数,有参构造函数
public class Father {
public String name;
public Father() {
}
public Father(String name) {
this.name = name;
System.out.println ("Father的有参构造函数");
}
}
子类
public class Children extends Father {
public Children() {
}
public Children(String name) {
//必须放在第一行
//调用父类的无参构造函数
super();
//调用本类的无参构造函数
//this();
//调用父类的有参构造函数
//super(name);
System.out.println ("Children有参构造函数");
}
public static void main(String[] args) {
new Children ();
}
}
image.png
image.png
image.png
网友评论