Tutorial de Java

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.

Navegador

Home | Anterior | Siguiente | Indice | Correo