Tipos
Para poder entender de qué va el polimorfismo debemos entender los conceptos claves, uno de ellos son los tipos, un tipo es la definición que se genera de una clase, por ello esto nos deriva en dos conceptos adicionales relacionados.
Con esto definimos los conceptos que nos van a ayudar a entender el polimorfismo, si ponemos el ejemplo un poco más extenso podemos decir que un Círculo siempre será del tipo FiguraGeometrica, pero no todos los tipos de FiguraGeometrica serán del tipo Circulo, si hablamos de las clases que acabamos de definir, por ejemplo si ahora creamos una subclase que herede de la clase FiguraGeometrica y se llame Rectángulo, ahora tenemos un nuevo subtipo, que sigue siendo del tipo FiguraGeometrica pero adopta una nueva forma y he aquí el polimorfismo.
Ejemplo Práctico
Ya que hemos visto la teoría de los tipos, podemos entonces decir que una subclase siempre va a ser del tipo de su clase padre, pero que la clase padre no será del tipo de su subclase o clase hija, con ello podemos entonces ver el siguiente ejemplo donde en un método pedimos por parámetro un objeto del tipo FiguraGeometrica, por ello podemos recibir sus muchas formas, en este caso podemos recibir un objeto de Circulo o de Rectángulo, ya que ambos a pesar de ser diferentes comparten el supertipo.
Veamos en la siguiente imagen un código que nos muestra cómo se comportaría un método con el polimorfismo:
En este ejemplo, el método mostrar objeto espera un objeto del tipo de FiguraGeometrica, si sabemos que Circulo y Rectángulo son subclases de FiguraGeometrica, entonces podemos pasar sus objetos al método ya que son diferentes formas de FiguraGeometrica y cumplen la función.
Ya hemos aprendido a utilizar el tercer pilar de la orientación a objetos, ahora podremos construir métodos más amplios y que pueden ser reutilizados en diferentes implementaciones de nuestros programas en Java.