El polimorfismo en Java es un concepto por el cual podemos realizar una misma acción de diferentes maneras. El polimorfismo deriva de 2 palabras griegas: poly y morphs. La palabra «poly» significa muchos y «morphs» significa formas. Así que polimorfismo significa muchas formas.
Hay dos tipos de polimorfismo en Java: polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución. Podemos realizar polimorfismo en java mediante la sobrecarga de métodos y el overriding de métodos.
Si sobrecargas un método estático en Java, es el ejemplo de polimorfismo en tiempo de compilación. Aquí, nos centraremos en el polimorfismo en tiempo de ejecución en java.
Polimorfismo en tiempo de ejecución en Java
El polimorfismo en tiempo de ejecución o Dynamic Method Dispatch es un proceso en el que una llamada a un método anulado se resuelve en tiempo de ejecución en lugar de en tiempo de compilación.
En este proceso, un método anulado es llamado a través de la variable de referencia de una superclase. La determinación del método a llamar se basa en el objeto al que hace referencia la variable de referencia.
Entendamos primero el upcasting antes del polimorfismo en tiempo de ejecución.
Upcasting
Si la variable de referencia de la clase Parent hace referencia al objeto de la clase Child, se conoce como upcasting. Por ejemplo:
Para el upcasting, podemos utilizar la variable de referencia de tipo clase o de tipo interfaz. Por ejemplo:
Aquí, la relación de la clase B sería:
B IS-A AB IS-A IB IS-A Object
Dado que Object es la clase raíz de todas las clases en Java, por lo que podemos escribir B IS-A Object.
Ejemplo de polimorfismo en tiempo de ejecución de Java
En este ejemplo, estamos creando dos clases Bike y Splendor. La clase Splendor extiende la clase Bike y anula su método run(). Estamos llamando al método run por la variable de referencia de la clase Parent. Dado que se refiere al objeto de la subclase y el método de la subclase anula el método de la clase Parent, el método de la subclase se invoca en tiempo de ejecución.
Dado que la invocación del método está determinada por la JVM y no por el compilador, se conoce como polimorfismo en tiempo de ejecución.
Prueba ahora
running safely with 60km.
Ejemplo de polimorfismo en tiempo de ejecución de Java: Banco
Considere un escenario donde Banco es una clase que proporciona un método para obtener el tipo de interés. Sin embargo, el tipo de interés puede variar según los bancos. Por ejemplo, los bancos SBI, ICICI y AXIS proporcionan un tipo de interés del 8,4%, 7,3% y 9,7%.
Nota: Este ejemplo también se da en el método overriding pero no hubo upcasting.
Pruébalo ahora
Salida:
SBI Rate of Interest: 8.4ICICI Rate of Interest: 7.3AXIS Rate of Interest: 9.7
Ejemplo de polimorfismo en tiempo de ejecución de Java: Shape
Pruébalo ahora
Salida:
drawing rectangle...drawing circle...drawing triangle...
Ejemplo de polimorfismo en tiempo de ejecución de Java: Animal
Pruébalo ahora
Salida:
eating bread...eating rat...eating meat...
Polimorfismo en tiempo de ejecución de Java con miembro de datos
Un método se sobrescribe, no los miembros de datos, por lo que el polimorfismo en tiempo de ejecución no se puede lograr por los miembros de datos.
En el ejemplo dado a continuación, ambas clases tienen un miembro de datos speedlimit. Estamos accediendo al miembro de datos por la variable de referencia de la clase Padre que se refiere al objeto de la subclase. Ya que estamos accediendo al miembro de datos que no está anulado, por lo tanto, se accederá al miembro de datos de la clase Padre siempre.
Regla: El polimorfismo en tiempo de ejecución no puede ser alcanzado por los miembros de datos.
Pruébalo ahora
Salida: