创建由子类初始化的最终字段

Isa*_*ack 2 java oop inheritance subclass superclass

我有一个带有子类的抽象类,这些子类共享一个方法,该方法按特定增量递增值,并受下限和上限限制。每个子类都有自己的增量和自己的边界这些值都应该声明为final,但是如果我将它们声明为final,它们如何由子类初始化。

下面是我能想到的让它工作的唯一方法,但看起来相当麻烦。

public abstract class ClassA {
    protected int LOWER_LIMIT;
    protected int UPPER_LIMIT;
    protected int INCREMENT;

    public ClassA() {
    }
}

public class ClassB extends ClassA {
    public ClassB() {
        super();
        this.LOWER_LIMIT = 0;
        this.UPPER_LIMIT = 4200;
        this.INCREMENT = 15;
    }
}

public class ClassC extends ClassA {
    public ClassC() {
        super();
        this.LOWER_LIMIT = 0;
        this.UPPER_LIMIT = 99;
        this.INCREMENT = 1;
    }
}

Run Code Online (Sandbox Code Playgroud)

Hon*_*dek 5

非常常见的模式是这样的。您还可以强制子类定义该值。

public abstract class Base {
    final protected int field1;
    final protected int field2;
    final protected int field3;

    protected Base(int field1, int field2, int field3) {
        this.field1 = field1;
        this.field2 = field2;
        this.field3 = field3;
    }

}

public class Subclass extends Base {
    public Subclass () {
        super(0, 4200, 15);
    }
}
Run Code Online (Sandbox Code Playgroud)