如何在抽象超类中定义常量/最终变量,但是在子类中分配它们?

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

但是,我想只在我的子类的构造函数中为这些变量赋值。

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

我想拥有的是这样的:

abstract class BaseClass { protected final int a; } class SubClass extends BaseClass { public SubClass() { a = 6; } } 

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

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

 abstract class BaseClass { protected final int a; protected BaseClass(int a) { this.a = a; } } class SubClass extends BaseClass { public SubClass() { super(6); } }