informaticaPC

Introducción a la Programación Orientada a Objetos (POO) y UML

Clases abstractas

Clases abstractas

Las clases abstractas son aquellas que por sí mismas no se pueden identificar con algo 'concreto' (no existen como tal en el mundo real), pero sí poseen determinadas características que son comunes en otras clases que pueden ser creadas a partir de ellas.

Para que lo comprendas mejor, un ejemplo de clase abstracta sería una llamada Vehículo: todos ellos realizan acciones similares (arrancar, acelerar, frenar, etc.), pero sin embargo existen muchos tipos de vehículos diferentes y que se comportan de forma totalmente distinta (el proceso de arrancarlos no se realiza siguiendo los mismos pasos, unos tienen que despegar y vuelan como los aviones, otros se sumergen para desplazarse por debajo del agua como los submarinos, cada uno de ellos necesita ser frenado de distinto modo...).

Es decir, en el mundo real no existe un objeto 'vehículo' como tal sino que hay diferentes tipos de vehículo, pero aunque poseen características comunes y realizan las mismas acciones lo hacen de forma muy diferente (pudiendo además realizar otras específicas cada uno de ellos).

Así pues, ya que una clase abstracta no representa algo concreto tampoco puede ser instanciada (no se puede crear un Objeto a partir de ella) pero sí es posible crear otras clases en base a su definición.

Main.java:

package EjemplosPOO.ejemplo04;

public class Main
{
    public static void main(String[] args)
    {
        Animal p = new Perro();

        p.setNombre("TOBI");
        p.comer();
        p.caminar();
        p.sonido();

        System.out.println("-------------");

        Animal g = new Gato();

        g.setNombre("MICIFUS");
        g.comer();
        g.caminar();
        g.sonido();
    }
}

Animal.java (nuestra clase abstracta):

package EjemplosPOO.ejemplo04;

public abstract class Animal
{
    private String nombre;

    // ----------------------

    public Animal() {
    }

    // ----------------------

    public String getNombre() {
        return this.nombre;
    }

    // ----------------------

    public void setNombre( String nombre ) {
        this.nombre = nombre;
    }

    // ----------------------

    public void comer() {
        System.out.println( this.getNombre() + " está comiendo...");
    }

    // ----------------------

    public void caminar() {
        System.out.println( this.getNombre() + " está caminando...");
    }

    // ----------------------

    // Este método deberá ser compartido por las clases que hereden
    public abstract void sonido();
}

Perro.java (hereda de Animal):

package EjemplosPOO.ejemplo04;

public class Perro extends Animal
{
    public Perro() {
    }

    // ----------------------------

    @Override
    public void sonido() {
        System.out.println( this.getNombre() + " dice: GUAU !");
    }
}

Gato.java (hereda de Animal):

package EjemplosPOO.ejemplo04;

public class Gato extends Animal
{
    public Gato() {
    }

    // ----------------------------

    @Override
    public void sonido() {
        System.out.println( this.getNombre() + " dice: MIAU !");
    }
}

Al ejecutar el programa veríamos lo siguiente:

Ejemplo

Más información

Vea también: [ Clases abstractas ]

Primera página Anterior Siguiente Última página
Usamos cookies para ofrecerte una experiencia mejorada, el continuar navegando supone que aceptas su uso