¿Cómo sortear la falta de campos abstractos en Java?
Supongamos que tenemos una clase abstracta.A
y queremos forzar a todas las subclases a tener un campo determinado. Esto no es posible en Java, porque no podemos definir campos abstractos.
Solución 1: Forzar subclases para implementar un método que entrega el valor deseado.
abstract class A {
abstract int getA();
}
Retirarse: Cada subclase tiene que implementar un método para cada campo abstracto que queremos tener. Esto puede llevar a muchas implementaciones de métodos.
Ventaja: Podemos utilizar el método.getA
en la clase abstracta e implementar métodos con ella enA
Sin implementarlas en cada subclase. Pero el valor detrás del método no puede ser sobrescrito por la clase abstracta.
Solución 2: Simule el campo abstracto forzando a la subclase a dar un valor a la clase abstracta.
abstract class A {
int a;
public A(int a) {
this.a = a;
}
}
Retirarse: Cuando tenemos varios campos (> 10), la llamada del súper constructor se verá un poco fea y confusa.
Ventaja: Podemos usar el campoa
en la clase abstracta e implementar métodos con ella enA
Sin implementarlas en cada subclase. Además, el valora
Puede ser sobrescrito por la clase abstracta.
Pregunta: ¿Qué solución es la forma común de alcanzar la meta? Tal vez hay uno mejor que los anteriores?