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?