Tipos de polimorfismo en Java [polimorfismo estático y dinámico con ejemplos]

Publicado: 2021-06-18

Tabla de contenido

¿Qué es el polimorfismo en Java?

Uno de los conceptos importantes en la Programación Orientada a Objetos (POO) es el polimorfismo, lo que significa que una sola acción se puede realizar de diferentes maneras. Se deriva de las palabras griegas: poli y morfos que significan muchos y formas. Las diferentes formas existen cuando se relacionan por herencia.

Al igual que la herencia que hereda métodos y atributos de una clase diferente, el polimorfismo aplica esos métodos y realiza diferentes tareas. Un objeto puede moldearse a sí mismo en varias formas a través del polimorfismo.

Es decir, una entidad puede realizar diferentes operaciones en diferentes escenarios. Uno de los usos más comunes del polimorfismo en la Programación Orientada a Objetos es cuando se usa una referencia de clase padre para referirse a un objeto de clase hijo. Lea más sobre varios conceptos y ejemplos de programación orientada a objetos.

El polimorfismo en Java se puede lograr a través de tres métodos:

Anulación de métodos: si una superclase y una subclase constan del mismo método, entonces la anulación de métodos se refiere al proceso de anular el método de la superclase por el método de la subclase. Como resultado, se utilizará el mismo método en diferentes condiciones realizando diferentes operaciones.

Salida del programa:

Lenguaje de programación Java

Idioma inglés común

  1. Sobrecarga de métodos: La sobrecarga de métodos se refiere al proceso de creación de métodos con el mismo nombre pero con diferentes parámetros. Los ejemplos incluyen: void func() {... }, void func(int a) {... }, float func(double a) {... }, float func(int a, float b) {... }.

Producción

**********

##########

  1. Sobrecarga de operadores: la sobrecarga de operadores es un concepto en Java en el que un operador se comporta de manera diferente con diferentes operandos. Ejemplos incluyen:
  • El operador "+" se puede utilizar tanto en la suma numérica como en la concatenación de cadenas.
Adición numérica Concatenación de cadenas
int a = 5;

int b = 6;

int suma = a + b; // Salida = 11

Cadena primero = "Python";

String second = “Programación”;

nombre = primero + segundo; // Salida = Programación en Python

  • Los operadores &,|, y ! se puede utilizar para la sobrecarga lógica y bit a bit.

Tipos de polimorfismo en Java

La Programación Orientada a Objetos se enfoca en cuatro conceptos básicos, es decir, abstracción, encapsulación, herencia y polimorfismo. El polimorfismo es la capacidad de procesar objetos de manera diferente en función de su clase y tipos de datos.

Hay dos tipos de polimorfismo en Java : polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución en Java . Este polimorfismo de java también se conoce como polimorfismos estáticos y polimorfismos dinámicos.

1. Polimorfismo estático (o polimorfismo en tiempo de compilación)

Como la mayoría de los otros lenguajes de programación OOP, el polimorfismo de Java permite la incorporación de múltiples métodos dentro de una clase. Los métodos usan el mismo nombre pero el parámetro varía. Esto representa el polimorfismo estático. Este polimorfismo se resuelve durante el tiempo del compilador y se logra mediante la sobrecarga de métodos. Se proporcionan tres criterios en los que los conjuntos de parámetros deben diferir:

  • El número de parámetros debe variar.
  • Los tipos de parámetros deben ser diferentes.
  • Diferente orden de parámetros. Por ejemplo, si un método acepta una cadena y un largo, mientras que el otro método acepta un largo y una cadena. Sin embargo, este tipo de orden dificulta la comprensión de la API.

Debido a la diferencia en los parámetros, cada método tiene una firma diferente. El compilador de Java tiene una idea de qué método se llama.

Aprenda cursos de software en línea de las mejores universidades del mundo. Obtenga programas Executive PG, programas de certificados avanzados o programas de maestría para acelerar su carrera.

Ejemplo de polimorfismo estático

Una de las formas en que Java admite el polimorfismo estático es la sobrecarga de métodos. A continuación se muestra un ejemplo que muestra el caso de sobrecarga de métodos en polimorfismo estático:

Ejemplo:

clase calculadora simple

{

suma int(int a, int b)

{

devuelve a+b;

}

suma int(int a, int b, int c)

{

devuelve a+b+c;

}

}

Demostración de clase pública

{

public static void main(String args[])

{

CalculadoraSimple obj = new CalculadoraSimple();

System.out.println(obj.add(25, 25));

System.out.println(obj.add(25, 25, 30));

}

}

salida del programa

50

80

2. Polimorfismo dinámico (o polimorfismo de tiempo de ejecución en Java)

En esta forma de polimorfismo en java , el compilador no determina el método a ejecutar. Es la Máquina Virtual Java (JVM) la que realiza el proceso en tiempo de ejecución. El polimorfismo dinámico se refiere al proceso cuando se resuelve una llamada a un proceso anulado en el tiempo de ejecución. La variable de referencia de una superclase llama al método anulado. Los métodos que implementan tanto la subclase como la superclase proporcionan una funcionalidad diferente mientras comparten el mismo nombre.

Comprender el proceso de Upcasting es crucial antes de comprender el concepto de polimorfismo en tiempo de ejecución. Upcasting se refiere al proceso en el que una variable de referencia de la superclase hace referencia a un objeto de la clase secundaria. Aprenda sobre el polimorfismo en PHP.

Ejemplo de polimorfismo dinámico (o tiempo de ejecución)

Ejemplo 1:

Se crean dos clases Bike y Splendor y la clase de Splendor extiende la clase de Bike anulando su método run(). El método run() es llamado por la variable de referencia de la clase padre. Dado que el método de la subclase anula el método de la clase principal; el método de la subclase se invoca en tiempo de ejecución.

El programa

bicicleta de clase {

void ejecutar () {System.out.println ("ejecutando");}

}

clase Splendor extiende Bike{

void run () {System.out.println ("caminar con seguridad con 30 km");}

público estático void principal(String args[]){

Bicicleta b = nuevo Splendor();//upcasting

b.ejecutar();

}

}

Salida: caminar con seguridad con 60km

Ejemplo 2

Se crean dos clases con los nombres de "ABC" y "XYZ", donde XYZ es una clase secundaria y ABC es una clase principal. Aquí, el método myMethod() de la clase principal es anulado por la clase secundaria. El objeto de la clase secundaria se asigna a la referencia de la clase principal.

Programa:

clase ABC{

public void myMethod(){

System.out.println(“Método anulado”);

}

}

la clase pública XYZ extiende ABC{

public void myMethod(){

System.out.println(“Método de anulación”);

}

public static void main(String args[]){

ABC objeto = nuevo XYZ();

obj.miMetodo();

}

}

Producción

Método de anulación

Conclusión

El concepto de polimorfismo en java es una de las características más útiles en la programación orientada a objetos. Además, la capacidad de invocar un método tanto en tiempo estático como en tiempo de ejecución amplía su aplicabilidad.

La idea detrás de traer el concepto de polimorfismo es la flexibilidad. Además, la capacidad de procesar una gran cantidad de objetos en una única variable de referencia facilita un poco la codificación. Por lo tanto, el concepto debe usarse en las tareas diarias de codificación y adoptar su efectividad.

Si desea obtener más información sobre la tecnología de software, su desarrollo y el mecanismo detrás de ella, puede consultar el curso Executive PG Program in Software Development - Specialization in Full Stack Development ofrecido por upGrad. El curso de especialización es un programa en línea de 23 semanas que ofrece más de 300 estudios de casos para aumentar su conocimiento y las herramientas disponibles y el lenguaje de programación para mejorar sus habilidades prácticas. Si tienes más consultas relacionadas con el curso, déjanos un mensaje. Nuestro equipo se pondrá en contacto contigo.

Planifique su carrera de desarrollo de software ahora.

Solicite el programa Executive PG en desarrollo de software de IIIT-B