java继承构造函数调用顺序问题

有两个类,一个Yuan继承Yan,调用Yuan的有参的构造函数,其调用顺序如何,且看代码:

package cn.yan.teststarter.test;

public class Yan {
    private String name;
    static {
        System.out.println(8);
    }

    public Yan() {
        System.out.println(1);
    }

    public Yan(String name) {
        this.name = name;
        System.out.println(2);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
package cn.yan.teststarter.test;

public class Yuan extends Yan {

    private String name;

    static {
        System.out.println(9);
    }

    public Yuan() {
        System.out.println(3);
    }
    public Yuan(String name) {
        this.name = name;
        System.out.println(4);
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
public static void main(String[] args) {
        new Yuan("li");
    }

最终其执行结果为:

8
9
1
4

由此我们可以发现,调用子类的有参构造函数,会先执行其父类的无参构造函数,又因静态代码块最先执行,则,执行顺序分别是:

父类静态代码块 -->> 子类静态代码块  -->> 父类无参构造函数 -->>  子类有参构造

你可能感兴趣的:(Java编程)