如何指定实现类必须包含特定字段?

Mat*_*all 1 java inheritance abstract-class

我想写一个抽象类(或接口)

  • 强制所有实现类提供特定类型和名称的字段(理想情况下是静态的)(如果它丢失,可能会抛出编译时错误?),或者
  • 在实现类时自动提供此类字段.

一个例子是:

public abstract class A {
    abstract int counter;
}

public class B extends A {
    public int getCounter() {
        return counter;
    }
}
Run Code Online (Sandbox Code Playgroud)

在这种情况下,B的getCounter()方法将返回counter 特定于 B 该类 的(静态或实例),而不是从中继承的值A.有没有办法在Java中这样做?

Kev*_*vin 8

没有一个好方法可以做到这一点,我也不相信应该这样做.您可以使用抽象方法完成相同的操作,并在基类中编写算法,以便它们利用委派的方法.

如果您提供有关您认为需要执行此操作的更多详细信息,我们可以帮助您制定更正确的解决方案.

例如:

public abstract class A {

    protected abstract int getCounter();

    public void doStuff() {
        int counter = getCounter();
        for (int i=0; i < counter; i++) {
            // do stuff
        }
    }

}
Run Code Online (Sandbox Code Playgroud)