El Polimorfismo

El polimorfismo hace referencia a la capacidad de que objetos de diferentes clases, respondan de manera diferente a un mismo método. En Java, esto se consigue mediante la herencia y las interfaces, posibilitando que distintas clases implementen un mismo método de formas distintas, ajustándolo a sus necesidades.

En el polimorfismo por herencia, las distintas subclases implementan un método de la superclase de distintas maneras, ajustándolo a las necesidades específicas de la subclase en cuestión.

Actividad: Practicando con el polimorfismo

  1. Abrimos un nuevo proyecto de Java en nuestro IDE de trabajo.
  2. Primero definimos la superclase: Animal
class Animal{
    public void comer() {
        System.out.println("El animal se alimenta");
    }
}
  1. Esta superclase tiene el método comer que será heredado posteriormente por dos subclases. No defino constructores, por simplicidad usaré el constructor por defecto.
  2. Definimos las subclases Leon y Cebra con la implementación especifica que hacen del método comer:
class Leon extends Animal{
    public void comer(){
        System.out.println("El Leon come carne");
    }
}
class Cebra extends Animal{
    public void comer(){
        System.out.println("La Cebra come hierba");
    }
}
  1. En el método main, creamos un objeto de tipo Animal que inicializamos con un constructor de su clase hija Leon. Posteriormente, instanciamos nuestro objeto de tipo animal con un constructor de su otra clase hija: Cebra.
public class Main {
    public static void main(String[] args) {
        Animal animal = new Leon();
        animal.comer();
        animal=new Cebra();
        animal.comer();
    }
}
  1. Las clases Animal, Leon y Cebra no las defino como publicas porque esto me obligaría a ubicarlas en ficheros *.java independientes. Manteniendo todas las clases en el mismo fichero creo que es aprecia mejor el ejemplo.
  2. Tampoco utilizo la notación @Override para mostrar que no es obligatoria, aunque si recomendable. En una actividad posterior la utilizaremos y explicaré sus ventajas.
  3. El resultado de ejecutar el programa es el siguiente:
El Leon come carne
La Cebra come hierba

La anotación @Override

La anotación @Override en una subclase, se emplea para indicar que un método heredado sobrescribe el método de la superclase.

Se coloca en la línea justo anterior a la declaración del método.

Su uso no es obligatorio, pero es considerado una buena práctica de programación y nos puede ayudar a evitar errores:

  • Cuando pretendemos sobrescribir un método en una subclase, si lo precedemos con esta anotación, el compilador comprueba si dicho método existe en la superclase, y si no existe generará un error. Sin la anotación no nos daríamos cuenta del error.
  • Si cambiamos el nombre del método en la superclase, el compilador nos alerta de que tenemos que cambiarlo también en las subclases.

NOTA:

Este post es parte de la colección “Java”. Puedes ver el índice de esta colección aquí.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.