Tengo la clase B, que hereda de la clase A. La superclase A es abstracta y contiene un método abstracto. No quiero implementar el método abstracto en la clase B, por lo tanto, también debo declarar que la clase B es abstracta. Declarando clase B abstracta, dos cosas me funcionan (los programas se compilan y ejecutan correctamente):Clases y métodos abstractos en Java, Herencia
1.) No declaro ningún método abstracto en la clase B, aunque la clase sea abstracta. Esto funciona, supongo, porque la clase hereda el método abstracto de la clase A, y esto es suficiente para que la clase se declare como abstracta: no necesitamos ningún otro método abstracto declarado directamente en la clase.
2.) Declaro el mismo método abstracto en la clase B como se declara en la clase A. Esto es una especie de anulación (?), No en el mismo sentido que la anulación en Java (usando el mismo encabezado, pero proporcionando una implementación diferente), aquí solo uso nuevamente el mismo encabezado del método.
Ambas cosas están funcionando, y no estoy seguro de si ambas están bien, y si algunas de ellas son preferidas (más correctas) que la otra. ¿Son las dos formas iguales (significan lo mismo para Java)?
Acá les dejo algunas clases de ejemplo, de modo que lo que quiero decir es más clara para usted:
Caso 1.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
}
Caso 2.):
public abstract class A {
public abstract String giveSum();
}
public abstract class B extends A {
public abstract String giveSum();
}
Saludos
¿Qué tal "no confundir al lector acerca de si se está definiendo un nuevo método" en lugar de "no es raro"? ;-) –
"is not strange" es más corto :-) –