Polimorfismo Java, que es el polimorfismo y sus tipos.
Hay dos tipos establecidos de polimorfismo:
-
El polimorfismo en tiempo de ejecución (
runtime
) o dinámico, que lo podemos implementar con la sobre escritura (overriding
) de métodos. -
El polimorfismo en tiempo de compilación (
compile time
) o estático, que lo podemos implementar en la sobrecarga (overloading
) de métodos
Hay una confusión entre algunas programadores a la hora de aceptar que la sobrecarga de métodos también es un Polimorfismo, básicamente si nos fijamos en el concepto se podría afirmar que si, ya que el mismo método puede tomar distintas formas dependiendo de los parámetros recibidos, como ya aclaramos un poco lo que es la teoría vamos aplicar los dos tipos de Polimorfismo en la práctica.
Polimorfismo en tiempo de ejecución (
runtime
), es el más usado y se podría implementar con dos clases hijas que hereden de una clase padre. Este es el diagrama de clases del ejemplo:
Persona
con un método que devuelve un String
y dos clases Hombre
y Mujer
que heredan de Persona
, ambas clases implementan el método de distinta manera y así logramos implementar el polimorfismo.
Clase
Persona
:
public class Persona { public String quienSoy() { return "Soy una persona"; } }Clase
Hombre
:
public class Hombre extends Persona { public String quienSoy() { return "Soy un hombre"; } }Clase
Mujer
:
public class Mujer extends Persona { public String quienSoy() { return "Soy una mujer"; } }Compilar codigo:
public static void main(String[] args) { Persona persona = new Persona(); Persona persona2 = new Hombre(); Persona persona3 = new Mujer(); System.out.println(persona.quienSoy()); System.out.println(persona2.quienSoy()); System.out.println(persona3.quienSoy()); }Esta es la salida del ejemplo:
Persona
de distintas formas y como en las clases Hombre
y Mujer
el método quienSoy
esta implementado de formas distintas podemos crear el Polimorfismo, se denomina polimorfismo en tiempo de ejecución (runtime
) o dinámico porque desde que comenzamos a sobrescribir los métodos en las clases hijas el compilador no tiene idea de cuál método vamos a llamar en tiempo de compilación compile time
y dada la situación la maquina virtual de java JVM entra en acción y en tiempo de ejecución runtime
decide a cual método invocar. Cuando no entendemos muy bien el concepto del polimorfismo o subestimamos su potencial (a nivel de código) nos preguntaremos en que parte del código debería aplicar el polimorfismo, o que esto no sirve de mucho y solo es un concepto más de Java, la verdad es que el polimorfismo en Java es una herramienta que cualquier desarrollador debería aprender y comenzar aplicar en sus códigos, todas las súper librerías ponen en práctica el polimorfismo, las interfaces van de la mano con el polimorfismo.
Siguiendo con la entrada ahora vamos a ver el polimorfismo en tiempo de compilación (
compile time
) en el que lo que hacemos es sobrecarga de métodos. No hay mucho que explicar aquí, este es el código:
public String quienSoy() { return "Soy una persona"; } public String quienSoy(String nombre) { return "Soy " + nombre; } public String quienSoy(String nombre, String apellido) { return "Soy " + nombre + " " + apellido; }El polimorfismo es en tiempo de ejecución (
compile time
) porque tiene tres formas diferentes de invocarlo, y dada esta situación el compilador si puede resolver a que método invocar sin necesidad de que JVM intervenga, esto es todo en este Dato Java, es un concepto que a veces puede enredarnos, es algo sencillo, comienza de menos a más, en la práctica esta el profesional. Suerte, si tienes una duda o una acotación no olvides comentar, y si te gusto la entrada no olvides compartir el conocimiento.
muy bueno
ResponderEliminarGracias por comentar,
EliminarSuerte!!