Como contornar a falta de campos abstratos em Java?

Suponha que tenhamos uma aula abstrataA e queremos forçar todas as subclasses a ter um determinado campo. Isso não é possível em Java, porque não podemos definir campos abstratos.

Solução 1: Forçar subclasses a implementar um método que forneça o valor desejado.

abstract class A {
  abstract int getA();
}

RecuaCada subclasse tem que implementar um método para cada campo abstrato que queremos ter. Isso pode levar a muitas implementações de métodos.

Vantagem: Podemos usar o métodogetA na classe abstrata e implementar métodos com ele emA sem implementá-los em cada subclasse. Mas o valor por trás do método não pode ser substituído pela classe abstrata.

Solução 2: Simule o campo abstrato, forçando a subclasse a dar um valor à classe abstrata.

abstract class A {
  int a;

  public A(int a) {
    this.a = a;
  }
}

RecuaQuando temos vários campos (> 10), a chamada de super construtor parecerá um pouco feia e confusa.

Vantagem: Podemos usar o campoa na classe abstrata e implementar métodos com ele emA sem implementá-los em cada subclasse. Além disso, o valora pode ser sobrescrito pela classe abstrata.

Questão: Qual solução alternativa é o caminho comum para atingir a meta? Talvez haja um melhor que os acima?

questionAnswers(5)

yourAnswerToTheQuestion