Java:初始化的内联私有final字段为null

nic*_*tch 10 java inheritance abstract

我无法理解为什么私有变量为null,即使它是内联初始化的.这是我的代码片段:

public abstract class A {
    public A() {
        initialize();
    }

    protected abstract void initializeLayout();
    protected void initialize() {
        // Do something
        initializeLayout();
    }
}

public abstract class B extends A {
    private final Object myVariable = new Object();

    @Override
    protected void initializeLayout() {
        // Do something with myVariable
    }
}
Run Code Online (Sandbox Code Playgroud)

好吧,当这段代码到达B.initailizeLayout时,myVariable为NULL.我认为内联字段在其他所有内容之前都已初始化,甚至在构造函数之前.我错了什么?

Era*_*ran 19

超类A的构造(其中要求initialize()它调用BinitializeLayout()子类B的实例变量被初始化之前被执行).因此,您的实例变量myVariable在那时仍为空.