La palabra polimorfismo significa tener muchas formas. En palabras simples, podemos definir el polimorfismo como la capacidad de un mensaje para mostrarse en más de una forma.
Ilustración de la vida real: polimorfismo
Una persona al mismo tiempo puede tener diferentes características. Como un hombre al mismo tiempo es padre, esposo, empleado. Entonces, la misma persona posee un comportamiento diferente en diferentes situaciones. Esto se llama polimorfismo. El polimorfismo se considera una de las características importantes de la programación orientada a objetos. El polimorfismo nos permite realizar una sola acción de diferentes maneras. En otras palabras, el polimorfismo le permite definir una interfaz y tener múltiples implementaciones. La palabra «poli» significa muchos y «morfos» significa formas, por lo que significa muchas formas.
Tipos de polimorfismo
El polimorfismo se divide principalmente en dos tipos:
- Polimorfismo en tiempo de compilación
- Polimorfismo en tiempo de ejecución
Ejemplos
Ejemplo 1: polimorfismo en tiempo de compilación
Comencemos con el polimorfismo en tiempo de compilación. En el polimorfismo en tiempo de compilación, el nombre funciona, es decir, la firma sigue siendo la misma pero los parámetros o el tipo de devolución son diferentes. En el momento de la compilación, el compilador resuelve qué funciones estamos tratando de llamar según el tipo de parámetros y más. Mira este ejemplo:
Kotlin
fun main (args: Array<String>) { println(doubleof(4)) println(doubleof(4.3)) println(doubleof(4.323)) } fun doubleof(a: Int):Int { return 2*a } fun doubleOf(a:Float):Float { return 2*a } fun doubleof(a:Double):Double { return 2.00*a }
Producción:
8 8.6 8.646
Ejemplo 2: polimorfismo en tiempo de ejecución
Ahora, hablemos del polimorfismo en tiempo de ejecución. En el polimorfismo en tiempo de ejecución, el compilador resuelve una llamada a métodos anulados/sobrecargados en tiempo de ejecución. Podemos lograr el polimorfismo en tiempo de ejecución mediante la anulación de métodos. Probemos un ejemplo en el que extendemos una superclase y anulamos uno de sus métodos miembro:
Kotlin
fun main(args: Array<string>){ var a = Sup() a.method1() a.method2() var b = Sum() b.method1() b.method2() } open class Sup{ open fun method1(){ println("printing method 1 from inside Sup") } fun method2(){ println("printing method 2 from inside Sup") } } class Sum:Sup(){ override fun method1(){ println("printing method 1 from inside Sum") } }
Producción:
printing method 1 from inside Sup printing method 2 from inside Sup printing method 1 from inside Sum printing method 2 from inside Sup
Aquí, el compilador resuelve, en tiempo de ejecución, qué método ejecutar.
Publicación traducida automáticamente
Artículo escrito por eralokyadav2019 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA