Clases Abstractas en Java

Veamos como primer post en este blog las Clases Abstractas de Java. El concepto es sencillo:

abstract class Ejemplo{
  abstract miMetodo();
}

Estudiemos pues este sencillo ejemplo:

  1. Para empezar identificamos la clase abstracta con la palabra reservada abstract.
  2. Esta clase abstracta tiene un método abstracto. Por cierto, este no tiene cuerpo (body). Eso es porque los métodos abstractos no necesitan cuerpo.

¿Y qué pasa si…?

abstract class OtroEjemplo{
}

¡Caramba! ¿Correcto o incorrecto? Esto es completamente correcto… Puesto que las clases abstractas tienen de 0 a N métodos abstractos. Sin embargo, el chiste de una clase abstracta es que precisamente tenga al menos un método abstracto.

¿Y entonces para qué nos sirven las clases abstractas? Las clases abstractas cumplen una función muy especial… Sólo sirven para implementar la herencia. Otro detalle: No se pueden instanciar. ¡Jamás! Es imposible encontrar un objeto de las clases Ejemplo y OtroEjemplo.

Vamos entrando en detalle…

Clase Animal:

abstract class Animal{
  public abstract void habla();
}

Clase Perro:

class Perro extends Animal{
  public void habla(){
    System.out.println("Guau, guau!");
  }
}

y la clase Gato:

class Gato extends Animal{
  public void habla(){
    System.out.println("Miau, miau!");
  }
}

Este ejemplo es mucho más claro… Sabemos que todos los animales hablan, pero no todos lo hacen de la misma forma… Por eso heredamos de la clase Animal el método abstracto `habla` y lo implementamos en las clases Perro y Gato¿Qué pasa si…?

class Gato extends Animal{
  public void hablaGato(){
    System.out.println("Miau, miau");
  }
}

Este código es totalmente incorrecto. Siempre que una clase hereda de una clase abstracta está obligada a usar un método con el mismo nombre, pero esta vez con sentencias dentro de las { llaves }.

public class Eject{
  public static void main(String... args){
    Animal donGato = new Gato();
    Animal benitoBodoque = new Gato();
  }
}

Hasta este momento el código es correcto. Estamos creando una referencia de la clase abstracta `Animal`. Pero recordemos, no podemos generar un objeto de tipo `Animal`. Sin embargo, podemos con la referencia de la clase `Animal` crear un objeto de la clase `Gato` o de la clase `Perro`.

Y en Java esas son las clases abstractas…

19 comentarios sobre “Clases Abstractas en Java

  1. Pues yo sigo sin enterarme para qué sirve. Por qué añadir abstrac? si haciendo una clase normal no te limita tanto,para complicarte la vida? No entiendo lo siento. Java me está matando ya.

    Y supongo que si pregunto esto es porque no me he enterado de la misa la mitad, ya lo sé. Pero es que la cabeza ya no me da para más!!!! T_T

Replica a Pistacho Cancelar la respuesta