Otras lecciones del Curso de Java
¿Qué es IO en Java?
¿Cúales son los Operadores en Java?
¿Qué tipos de Variables hay en Java?
¿Cómo funciona Continue y Break en Java?
¿Cómo aplicar un Try Catch y Finally en Java?
¿Cómo utilizar el método super en Java?
¿Cómo trabajar con listas en Java?
¿Cuáles son los métodos de la clase String en Java?
¿Qué es un entorno de desarrollo en Java?
¿Qué es la Sobreescritura de métodos en Java?
¿Cómo utilizar un return en Java?
¿Cómo hacer un Hola Mundo en Java?
¿Cómo utilizar Throw y throws en Java?
¿Cómo hacer comentarios en Java?
¿Cuáles son las Palabras reservadas en Java?
Variables de entorno en Java
Características y estadísticas de Java e índice TIOBE
Estructura de proyecto, paquetes y clases en Java
Qué es una función en Java
¿Cómo funcionan las Funciones Java?
Operadores aritméticos en Java
Operadores de comparación en Java
Funciones anónimas en Java
Cómo invocar una función en Java
Atajos de teclado para IntelliJ
¿Qué es la Sobrecarga de funciones en Java?
Operadores lógicos en Java
Debug en Java
Como se crea una función en Java
¿Cómo crear Sentencias Switch en Java?
Bucles for en Java
¿Cómo hacer sentencias If e If else en Java?
¿Cómo funcionan los Bucles While en Java?
¿Qué son los objetos en Java?
¿Qué es el modificador static en Java y cómo se utiliza?
¿Qué es la herencia en Java?
¿Qué son los constructores en Java y cómo se utilizan?
¿Cómo crear clases en Java?
¿Qué son las Clases Abstractas en Java?
¿Qué es la Programación genérica en Java?
¿Qué son las Interfaces de Java?
Implementación de una interface en Java
¿Cómo se hace refactoring en Java?
¿Cómo trabajar con Maps en Java?
¿Como funcionan los arrays en Java?
¿Cómo generar excepciones en Java?
¿Qué es la clase Scanner en Java?
Introducción a Swing en Java
¿Quieres descubrir más cosas como Polimorfismo en Java?¡Apuntate a nuestro campus y empieza a aprender con nosotros y con toda la comunidad!

Cuando aplicamos herencia en programación con Java (y otros lenguajes también), tenemos una clase base (clase padre) y otras clases (clases hijas) que heredan de esta métodos y atributos, mediante la palabra extends.

Las clases hijas, utilizan los mismos métodos creados en la clase padre y casi siempre realizan las mismas cosas, pero a veces las clases derivadas o hijas, si bien pertenecen al mismo tipo que la clase padre, al implementar los métodos heredados su resultado es necesariamente distinto.

Supongamos que tenemos una clase base (padre) Animal, cuyo método es desplazamiento, y sus clases derivadas (hijas) son PalomaCaballo, ambos son animales, pero se desplazan distinto, la paloma vuela y el caballo trota.

Es ahí cuando precisamos que el método desplazamiento nos dé como resultado algo distinto para cada clase hija (vuela y trota), esto se llama polimorfismo.

¿Qué es un polimorfismo en Java?
El polimorfismo es un mecanismo más de la programación orientada a objetos, se da cuando sobreescribimos una función heredada (se lo conoce como overwrite) para que haga otra cosa que no es la que hacía originalmente.

Consiste en que las clases hijas implementan la misma función (método) pero hacen distinta cosa. Es la capacidad de algunos lenguajes de POO para hacer que desde distintos objetos al invocar un mismo método, este método pueda responder de manera distinta. 

Por ejemplo si definimos una clase instrumentos y le damos un método que sea, “sonidoqueemite” y luego creamos dos clases hijas, como guitarra y tambor, ambas clases pueden utilizar el método “sonidoqueemite”, pero su implementación será distinta, ya que tambor y guitarra emiten sonidos distintos, veamos un poco el código:

class Instrumentos {
    public void sonidoQueEmite() {
        System.out.println("tilin, tilin...");
    }
}

class Guitarra extends Instrumentos {
    public void sonidoQueEmite() {
        System.out.println("sonido de tambor");
    }
}


class Tambor extends Instrumentos {
    public void sonidoQueEmite() {
        System.out.println("sonido de guitarra");
    }
}

¿Cuándo se emplea polimorfismo en Java?

El polimorfismo se utiliza para trabajar con estructuras de datos (arrays) que son listas de objetos y permite reconocer y explotar las características similares entre distintas clases de un objeto (clase auto -objeto auto-, clase hija1 auto familiar, clase hija2 auto deportivo).

Las clases hijas llevarán el mismo prototipo de método que la clase base (padre), el método se llama de la misma manera, pero el resultado es distinto.

Podemos decir que la misma función implementada en clases hijas en una relación de dependencia con una clase padre, ejecutará la función que esté más cercana a ese nivel de dependencia.  

El polimorfismo nos permite simplificar el código y reducir la cantidad de clases base que debemos programar, pues se sobreescriben los métodos originales de acuerdo a la necesidad que presenten nuestras clases derivadas.

La herencia y el polimorfismo en Java están relacionados, es un concepto complejo y a veces difícil de entender, por eso en Openbootcamp te ofrecemos nuestros cursos de Java y Java Avanzado para que puedas interiorizarte en este tema con más profundidad, de forma gratuita y a tu propio ritmo.

¿Todavía no te has apuntado a nuestro Bootcamp?
Tenemos muchos cursos para ofrecerte y ¡TOTALMENTE GRATIS! Estos son algunos de ellos: