我有一个抽象类,我想要声明最终变量.
但是,我只想在我的子类的构造函数中为这些变量赋值.
显然,这是不可能的,因为所有的“最终的字段都必须被初始化”.我不明白为什么,因为不可能实例化一个抽象类.
我想要的是这样的:
abstract class BaseClass { protected final int a; } class SubClass extends BaseClass { public SubClass() { a = 6; } }
我想象一下类似于实现接口的方法.那么你也被迫在(子)类中实现方法.
解决方法
您应该在抽象类中定义一个构造函数,该构造函数为一个值赋值,并从您的子类中调用此构造函数.这样,您将确保始终初始化最终属性.
abstract class BaseClass { protected final int a; protected BaseClass(int a) { this.a = a; } } class SubClass extends BaseClass { public SubClass() { super(6); } }