Java类继承方法执行先后顺序(初始化时类变量赋值失败)

版权声明:转载请在开头注明博客原地址,谢谢! https://blog.csdn.net/qq_35928566/article/details/82219766

继承执行先后顺序

class A {
    public A(){
        init();
    }
    void init(){
    }
}
class B extends A{
    int a;
    public B(){
        super();
        a=10;
    }
    @overwrite
    void init(){
        System.out.println(a);
        System.out.println("this is B");
    }
}

上述两个类,在B初始化的时候先后顺序如下:
A() —> B.init() —>B()
输出结果如下:

    0
    this is B

因为在输出a的时候,B的构造方法还没有被执行,所以a=0;

修改代码如下

class A {
    public A(){
        init();
    }
    void init(){
    }
}
class B extends A{
    int a;
    public B(){
        super();
        a=10;
        System.out.println(a);
    }
    @overwrite
    void init(){
        System.out.println("this is B");
    }
}

输出结果如下:

    this is B
    10

结果显而易见了。

猜你喜欢

转载自blog.csdn.net/qq_35928566/article/details/82219766
今日推荐