我有一个A类,它扩展了B类,并覆盖了在父构造函数中调用的createBody()方法:

public class A extends B {

    SomeClass x = null

    public A(int parameter) {
        super(parameter);
        //do something with atributte x
    }

    createBody() {
       //do some stuff
       //assign attribute x
    }
}


public class B {

    public B(int parameter) {
        //do some stuff
        createBody();
    }

    abstract public void createBody();
}


如您所见,方法createBody()修改了x属性。我的问题是,超类构造函数完成后(当我创建子类的实例时),x属性仍然为null。我究竟做错了什么?

最佳答案

我可以警告您,您在这里危险的水域内。在进行处理时,您可能会意识到要在超类构造函数中调用createBody,但要在子类中实现它。这样,您就可以在子类的初始化还没有开始之前就将控制权转移给子类方法。例如,在这一点上,即使是

private final String x = "string";


尚未运行,并且x为空。这是Java的反习惯用法,您应该不惜一切代价避免使用它。

关于java - 如何在父类(super class)构造函数中使用子类的属性?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13239455/

10-10 08:55