Polimorfismo en Java: conceptos, tipos, características y ejemplos

Publicado: 2022-04-18

Javascript es uno de los lenguajes de programación orientados a objetos más populares y ampliamente utilizados, junto con C#, PHP, Python, C++, etc. Permite a los usuarios exhibir y abordar conceptos de la vida real a través de la programación, ya que todo se representa como un objeto. Las características de Java como lenguaje de programación ofrecen varias vías para simplificar el desarrollo de software al hacer que los códigos sean más dinámicos y facilitar el mantenimiento.

En este artículo, exploraremos Java como un lenguaje de programación orientado a objetos y comprenderemos los conceptos de herencia, abstracción, polimorfismo y encapsulación de datos. También veremos los tipos de polimorfismo en Java, sus ventajas y desventajas.

Tabla de contenido

Descripción general de la programación orientada a objetos

Los lenguajes de programación orientada a objetos (POO) se refieren a aquellos lenguajes informáticos que utilizan el concepto de 'objetos' en tiempo real en la codificación. Su objetivo es implementar entidades mundanas como herencia, polimorfismo, bucles, abstracción de datos, etc., a través de la programación.

Hay algunos conceptos básicos de la programación orientada a objetos con los que los programadores deben familiarizarse. Estos términos conceptuales son necesarios para aprender sobre las características especiales y únicas de OOP, como la encapsulación, el polimorfismo, etc.

1. Clase

Una 'clase' representa un conjunto de propiedades y métodos que se aplican a todos los 'objetos' especificados dentro de la clase. Los objetos pueden ser de diferentes tipos, como enteros, matrices o cadenas, etc. Una clase es como un prototipo definido por el usuario, a partir del cual se pueden crear diferentes 'objetos'.

2. Objeto

Un objeto es la unidad más fundamental de los lenguajes OOP, que representa datos reales en la vida real. Los objetos tienen las propiedades de las clases en las que se invocan.

3. Método

Un método es un conjunto de declaraciones que involucran diferentes funciones que se combinan para realizar una tarea específica. Devuelve la salida después de completar las instrucciones definidas por el usuario. También puede llevar a cabo tareas que no producen ningún resultado. Los métodos permiten a los programadores reutilizar los códigos sin volver a escribirlos. Java requiere que todos los métodos pertenezcan a una clase, a diferencia de lenguajes como C++, C o Python.

Conceptos de programación orientada a objetos

Hay cuatro principios principales de la programación orientada a objetos: Java exhibe todas estas propiedades:

1. Abstracción

La abstracción de datos es una propiedad de los lenguajes OOP que muestra los detalles necesarios mientras mantiene otros detalles irrelevantes del objeto fuera de la visibilidad para el usuario, como el código de implementación. Esta función solo muestra los detalles esenciales y relevantes, lo que ayuda a los desarrolladores a realizar rápidamente los cambios apropiados en la funcionalidad de una clase.

2. Encapsulación

La encapsulación de datos se refiere al envoltorio de datos dentro de unidades. Esta propiedad de los lenguajes OOP protege los datos encapsulados de otras funciones y métodos. Une el código y los métodos especificados para realizar operaciones en unidades singulares, evitando así que sean manipulados o accedidos por métodos externos. Esto también se conoce como ocultación de datos.

3. Herencia

La herencia es otra característica importante de los lenguajes OOP que permite que una clase herede propiedades de otras clases. Funciona sobre el concepto de reutilización de códigos, lo que reduce la necesidad de volver a escribir las características de clase repetidamente. La clase que hereda de otra clase se conoce como subclase, y la clase que se hereda se conoce como superclase.

4. Polimorfismo

El polimorfismo permite que un objeto tome muchas formas y realice tareas similares o muestre comportamientos similares en diferentes métodos.

Polimorfismo en Java

El polimorfismo permite que una sola tarea se realice de varias maneras. Es una propiedad que ayuda a identificar y diferenciar entre entidades de código similares, mejorando así la eficiencia de los lenguajes OOP.

En Java, el polimorfismo se exhibe al declarar objetos como entidades separadas. De esta manera, la misma acción se puede realizar de múltiples maneras. El polimorfismo se activa junto con la herencia, lo que permite que los objetos realicen diferentes tareas utilizando las propiedades heredadas de diferentes clases. Las diferencias en la designación de métodos u objetos distinguen dos entidades.

Aprenda cursos de desarrollo de software en línea de las mejores universidades del mundo. Obtenga Programas PG Ejecutivos, Programas de Certificado Avanzado o Programas de Maestría para acelerar su carrera.

Características del polimorfismo

1. Coacción

La conversión implícita de tipos de datos para evitar errores de tipo durante el tiempo de compilación es coerción. No incluye conversiones explícitas de tipos de datos, sino que sigue solo la jerarquía de conversión que permite Java. Por ejemplo, si un operando está a flote y el operador es un número entero, la resultante estará a flote.

2. Parámetros/variables polimórficas

Un objeto o variable que puede contener valores de varios tipos durante el tiempo de ejecución se conoce como variable o parámetro polimórfico. Establece que al declarar una clase, los mismos nombres de variables pueden contener diferentes tipos de datos, y los mismos nombres de métodos pueden contener diferentes parámetros y tipos de retorno.

3. Sobrecarga interna del operador

La sobrecarga de operadores utiliza un símbolo de operador según lo requiera el usuario. Java admite la sobrecarga de operadores internos. También es un ejemplo de polimorfismo estático.

Tipos de polimorfismo en Java

En Java, el polimorfismo se puede invocar usando:

1. Sobrecarga de métodos

La sobrecarga de métodos es el proceso de creación de múltiples objetos o métodos que llevan el mismo nombre y pertenecen a la misma clase. Funciona dentro de una clase.

2. Anulación de métodos

La anulación de métodos es cómo una subclase constituye los mismos métodos declarados en la superclase. Funciona en todas las clases. Si la subclase contiene los mismos métodos ya presentes en la superclase, la función de la subclase se anula.

Polimorfismo de subtipos en Java

El polimorfismo del subtipo depende de Upcasting y Late Binding.

  • Upcasting es un proceso mediante el cual un objeto o método puede promover un tipo de datos (flotante, entero, etc.) de un subtipo a un supertipo moviéndolo hacia arriba en la jerarquía de herencia.
  • El enlace tardío se utiliza para llamar a métodos que no son instancias finales.

En esto no interviene ningún operador porque el subtipo mismo es miembro del supertipo. Por ejemplo, si una clase se llama colores, sus subtipos pueden ser rojo, azul, naranja, verde, etc. El polimorfismo de subtipo incluye los subtipos para exhibir las propiedades del supertipo. Sin embargo, se pierde el acceso a las propiedades individuales de cada subtipo.

Polimorfismo en tiempo de ejecución en Java

En Java, el polimorfismo en tiempo de ejecución también se conoce como envío de método dinámico o enlace dinámico. Se logra a través de la anulación de métodos: llamar a un método anulado para proporcionar una resolución dinámica en tiempo de ejecución. Se puede lograr a través de funciones y no de objetos.

Aquí hay un ejemplo de polimorfismo en tiempo de ejecución en Java:

coche de clase{

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

}

clase Volkswagen extiende Car{

void run(){System.out.println(“Conducir con seguridad con 90 km”);}

public static void main(String args[]){

Coche c = nuevo Volkswagen();//upcasting

b.ejecutar();

}

}

Salida :

Conducir con seguridad con 90km

Polimorfismo de tiempo de compilación en Java

El polimorfismo en tiempo de compilación se logra mediante la sobrecarga de métodos. Es el proceso en el que se realiza y resuelve la llamada a un método sobrecargado durante el tiempo de compilación. También se conoce como polimorfismo estático. Java es lo suficientemente flexible como para permitir que el usuario use métodos u objetos que tengan los mismos nombres siempre que sus declaraciones y propiedades de firma sigan siendo diferentes.

Aquí hay un ejemplo de polimorfismo en tiempo de compilación en Java:

clase SimpleCalc

{

suma int(int x, int y)

{

devuelve x+y;

}

suma int(int x, int y, int z)

{

devuelve x+y+z;

}

}

Demostración de clase pública

{

public static void main(String args[])

{

SimpleCalc obj = new SimpleCalc();

Sistema.out.println(obj.add(20, 30));

System.out.println(obj.add(40, 30, 20));

}

}

Salida :

50

90

Importancia del polimorfismo

El polimorfismo permite la escritura de métodos que pueden constituir diferentes tipos de entidades que llevan el mismo nombre. El polimorfismo es esencial en Java debido a sus diversos beneficios de uso y el alcance que brinda para hacer que el código sea dinámico:

  1. Permite la reutilización de códigos: no es necesario escribir los mismos códigos varias veces.
  2. Permite que una variable muestre múltiples comportamientos: tener el mismo nombre pero diferentes propiedades puede abrir un margen para mantener la coherencia en los códigos.
  3. Reducción de códigos masivos: ayuda en la depuración al tiempo que acorta el tiempo de compilación, ahorrando memoria, energía y tiempo del usuario.

Posibles problemas en la implementación de polimorfismo

El polimorfismo puede resultar confuso de usar e implementar. Reduce la legibilidad de los códigos, por lo que presenta amenazas de múltiples errores y errores. También crea problemas con la realización de funciones según sea necesario.

Hay un problema clásico a tener en cuenta: el problema de la clase base frágil. Se refiere al ensamblaje y codificación inadecuados de una clase heredada que da como resultado métodos que muestran resultados impredecibles.

Conclusiones

La naturaleza frágil de la herencia puede conducir a códigos disfuncionales y rotos a pesar de que se cumplan todos los demás criterios. Este problema arquitectónico básico se considera el problema de la clase base frágil. Obtenga más información sobre cómo Java exhibe los conceptos de OOP uniéndose al Programa PG Ejecutivo de upGrad en Desarrollo de Software - Especialización en Desarrollo de Pila Completa . Sea asesorado por expertos de la industria y desarrolle conocimientos prácticos al participar en proyectos prácticos y colaborativos con sus compañeros.

¡Reserva tu asiento hoy!

¿Qué es el enlace estático y dinámico?

Los objetos que se determinan en el momento de la compilación se conocen como enlace estático. Por otro lado, los tipos de vinculación dinámica de objetos se determinan en tiempo de ejecución. El primero se usa durante la sobrecarga de métodos y el segundo durante la anulación de métodos.

¿Cuáles son las dos diferencias fundamentales entre la anulación de métodos y la sobrecarga de métodos?

En Java, la anulación de métodos no anula los métodos estáticos, privados y finales, mientras que la sobrecarga de métodos sobrecarga los métodos estáticos, privados y finales en Java. Además, la anulación de métodos sujetos a enlace dinámico y, por otro lado, los métodos sobrecargados pasan por enlace estático.

¿Cuáles son las diferencias entre polimorfismo y herencia en Java?

En Java, hay varios puntos de diferencia entre polimorfismo y herencia:

1. La herencia es una representación de la relación padre-hijo del mundo real en la codificación. Pero el polimorfismo es un catalizador que utiliza esta relación para hacer que el programa sea más dinámico.
2. La herencia permite la reutilización de códigos de la clase secundaria al heredar los mismos de la clase principal. El polimorfismo, por el contrario, permite que la clase secundaria redefina su comportamiento existente nuevamente dentro de la clase principal.