子类父类初始化流程

2021-07-12  本文已影响0人  念䋛

父类子类在初始化的是执行的流程
①子类构造器会隐式调用父类的无参构造方法,如果子类显式利用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
上一篇下一篇

猜你喜欢

热点阅读