在父构造函数中使用子属性

r9f1avp5  于 2021-06-29  发布在  Java
关注(0)|答案(1)|浏览(327)
class abstract Parent ()
{
     private int a;
     private final int b = a + 1; // a is null at that point
}

class Child extends Parent
{
    public Child()
    {
       a = 2;
    }
}

在c++中这并不是一个真正的问题(因为指针),但是我不确定如何在java中处理这个问题。很明显 a 等于0时 Parent 尝试启动 b .
我最初试着打电话 super() 凝固后 a ,但显然 super() 必须先打电话进来 child 的构造函数。我不想设置 bChilds 我更喜欢 b 成为 final 我也是。有什么想法吗?

5w9g7ksd

5w9g7ksd1#

你想做的事不能这样做,你需要做的是传递 a 给一个 Parent :

abstract class Parent {
    private int a;
    private final int b;

    protected Parent(int a) {
        this.a = a;
        b = a + 1;
    }
}

并定义 Child 作为:

class Child extends Parent {
    public Child() {
        super(2);
    }
}

相关问题