|
Clases Abstractas |
Anterior | Siguiente |
Una de las características más útiles de
cualquier lenguaje orientado a objetos es la posibilidad de declarar clases que definen
como se utiliza solamente, sin tener que implementar métodos, son las clases
abstractas. Mediante una clase abstracta se intenta fijar un conjunto mínimo de
métodos (el comportamiento) y de atributos, que permitan modelar un cierto concepto, que
será refinado y especializado mediante el mecanismo de la herencia. Como consecuencia, la
implementación de la mayoría de los métodos de una clase abstracta podría no tener
significado. Para resolver esto, Java proporciona los métodos abstractos. Estos
métodos se encuentran incompletos, sólo cuentan con la declaración y no poseen cuerpo
de definición. Esto es muy útil cuando la implementación es específica para cada
usuario, pero todos los usuarios tienen que utilizar los mismos métodos. Un ejemplo de
clase abstracta en Java es la clase Graphics:public abstract class Graphics { public abstract void drawLine( int x1,int y1,int x2,int y2 ); public abstract void drawOval( int x,int y,int width,int height ); public abstract void drawArc( int x,int y,int width, int height,int startAngle,int arcAngle ); . . . } Los métodos se declaran en la clase Graphics, pero el código que ejecutará el método está en algún otro sitio: public class MiClase extends Graphics { public void drawLine( int x1,int y1,int x2,int y2 ) { <código para pintar líneas -específico de la arquitectura-> } } Cuando una clase contiene un método abstracto tiene que declararse abstracta. No obstante, no todos los métodos de una clase abstracta tienen que ser abstractos. Las clases abstractas no pueden tener métodos privados (no se podrían implementar) ni tampoco estáticos. Una clase abstracta tiene que derivarse obligatoriamente, no se puede hacer un new de una clase abstracta. Una clase abstracta en Java es lo mismo que en C++ virtual func() = 0; lo que obliga a que al derivar de la clase haya que implementar forzosamente los métodos de esa clase abstracta. |
|