12

我有一个抽象类,我想在其中声明最终变量。

但是,我只想在我的子类的构造函数中将值分配给这些变量。

显然,这是不可能的,因为所有“最终字段都必须初始化”。我不明白为什么,因为无论如何都不可能实例化一个抽象类。

我想要的是这样的:

abstract class BaseClass {
    protected final int a;
}

class SubClass extends BaseClass {
    public SubClass() {
        a = 6;
    }
}

当你实现一个接口时,我想象一些类似于方法的东西。然后你也被迫实现(子)类中的方法。

4

1 回答 1

17

你应该在你的抽象类中定义一个构造函数,它接受一个值a并从你的子类中调用这个构造函数。这样,您将确保您的最终属性始终被初始化。

abstract class BaseClass {
    protected final int a;

    protected BaseClass(int a)
    {
        this.a = a;
    }
}

class SubClass extends BaseClass {
    public SubClass() {
        super(6);
    }
}
于 2012-10-20T12:14:14.540 回答