如何解决Java中缺少抽象字段的问题?

Joh*_*ood 5 java abstract-class field

假设,我们有一个抽象类A,我们想强制所有子类都有一个特定的字段.这在Java中是不可能的,因为我们无法定义抽象字段.

解决方法1:强制子类实现提供所需值的方法.

abstract class A {
  abstract int getA();
}
Run Code Online (Sandbox Code Playgroud)

缺点:每个子类都必须为我们想要的每个抽象字段实现一个方法.这可以导致许多方法实现.

优点:我们可以getA在抽象类中使用该方法,并使用它实现方法,A而无需在每个子类中实现它们.但是抽象类不能覆盖方法背后的价值.

解决方法2:通过强制子类为抽象类赋值来模拟抽象字段.

abstract class A {
  int a;

  public A(int a) {
    this.a = a;
  }
}
Run Code Online (Sandbox Code Playgroud)

缺点:当我们有多个字段(> 10)时,超级构造函数调用看起来有点难看和混乱.

优点:我们可以a在抽象类中使用该字段并使用它实现方法,A而无需在每个子类中实现它们.此外,该值a可以被抽象类覆盖.

问题:实现目标的常用方法是哪种解决方法?也许比上面的更好?

Ras*_*nke 0

我认为 opt.1 是迄今为止最干净的。一些 getter 和 setter 并不是什么大问题,而且我怀疑许多用例不仅仅只有一些抽象的“字段”。

关于 opt.2,您忘记了构造函数不是继承的,因此需要以考虑的方式实现所有子类构造函数a