Este Tipo de Clases nos
permiten crear “método generales”, que recrean un comportamiento común, pero
sin especificar cómo lo hacen, veamos lo de esta manera.
Para resolver esta problemática Java proporciona las clases y métodos abstractos. Un método abstracto es un método declarado en una clase para el cual esa clase no proporciona la implementación (el código). Una clase abstracta es una clase que tiene al menos un método abstracto. Una clase que extiende a una clase abstracta debe implementar los métodos abstractos (escribir el código) o bien volverlos a declarar como abstractos, con lo que ella misma se convierte también en clase abstracta.
Declaración e implementación de métodos abstractos
Siguiendo con el ejemplo del apartado anterior, se puede escribir:La clase abstracta se declara simplemente con el modificador abstract en su declaración. Los métodos abstractos se declaran también con el mismo modificador, declarando el método pero sin implementarlo (sin el bloque de código encerrado entre {}). La clase derivada se declara e implementa de forma normal, como cualquier otra. Sin embargo si no declara e implementa los métodos abstractos de la clase base (en el ejemplo el método dibujar) el compilador genera un error indicando que no se han implementado todos los métodos abstractos y que, o bien, se implementan, o bien se declara la clase abstracta.abstract class FiguraGeometrica {
. . .
abstract void dibujar();
. . .
}
class Circulo extends FiguraGeometrica {
. . .
void dibujar() {
// codigo para dibujar Circulo
. . .
}
}
Referencias y objetos abstractos
Se pueden crear referencias a clases abstractas como cualquier otra. No hay ningún problema en poner:Sin embargo una clase abstracta no se puede instanciar, es decir, no se pueden crear objetos de una clase abstracta. El compilador producirá un error si se intenta:FiguraGeometrica figura;
Esto es coherente dado que una clase abstracta no tiene completa su implementación y encaja bien con la idea de que algo abstracto no puede materializarse.FiguraGeometrica figura = new FiguraGeometrica();
Sin embargo utilizando el up-casting si se puede escribir:
Cabe resaltar que al hacerlo utilizando el up-casting estas haciendo referencia al polimorfismo de una manera involuntaria, pero esto lo entederemos mejor cuando veamos polimorfismo.FiguraGeometrica figura = new Circulo(. . .);
figura.dibujar();
La invocación al método dibujarse resolverá en tiempo de ejecución y la JVM llamará al método de la clase adecuada. En nuestro ejemplo se llamará al método dibujarde la clase Circulo.
No hay comentarios:
Publicar un comentario