what is polymorphism java tutorial with examples
Este tutorial explica qué es el polimorfismo en Java, los tipos de polimorfismo y cómo implementar el polimorfismo en tiempo de compilación con ejemplos:
La palabra 'polimorfismo' se deriva de dos palabras, es decir, 'Escuela politécnica' que significa muchos y ' morfos ”Formas de significado. Por tanto, polimorfismo significa muchas formas. En un lenguaje de programación, podemos decir que un objeto puede tomar muchas formas y, por tanto, el objeto es polimórfico.
El polimorfismo es una de las características más importantes de la programación orientada a objetos y nos permite expresar una característica (un objeto o un mensaje o un método o un operador) en varias formas.
=> Eche un vistazo a la guía para principiantes de Java aquí.
Lo que vas a aprender:
Introducción al polimorfismo en Java
La entidad polimórfica se comporta de manera diferente en diferentes escenarios.
Por ejemplo, considere un operador '+' (suma) en Java. Este es un operador binario y toma dos operandos. Cuando los operandos que se pasan al operador '+' son números, se realiza una operación de suma que devuelve la suma de dos números.
Cuando los operandos cambian al tipo String, el operador '+' no agrega los objetos String, sino que concatena o une el contenido de la cadena para formar una tercera cadena resultante.
Por ejemplo, si ' uno ' y ' dos 'Son el contenido de dos objetos String, 'Uno' + 'dos' resultará en ' uno dos ”. Esta es la concatenación.
En Java, todos los objetos son polimórficos ya que todos se derivan de la clase 'Objeto' y, por lo tanto, cumplen la relación 'IS-A' con la clase Objeto.
Siempre se accede a un objeto a través de una variable de referencia de ese tipo de clase en particular. Una vez que se declara una variable de referencia de un tipo en particular, no se puede modificar. Sin embargo, si la variable de referencia no se declara como 'Final', podemos reasignarla para que apunte a otros objetos.
El tipo de referencia de este objeto decidirá los métodos o funciones de clase que se deben llamar.
Por ejemplo,si hay una clase ABC y una clase XYZ derivada de ABC, ambas clases tienen un método polimórfico func ().
|_+_|Creemos una referencia de tipo ABC.
|_+_|Ahora, cuando llamamos al método func (), dado que el objeto apuntado por obj es de clase XYZ, se invocará el método func () de la clase XYZ.
Como hemos visto en el ejemplo anterior, el método func () tiene diferentes implementaciones pero el mismo prototipo. Dependiendo del objeto apuntado por el objeto de referencia, tenemos la implementación apropiada en ese escenario invocado. Esto es polimorfismo.
Analicemos el polimorfismo en Java en detalle.
Ejemplo de polimorfismo de Java
Entendamos un ejemplo simple de polimorfismo en Java con la operación de suma como se discutió anteriormente.
Aquí usamos dos métodos con el mismo nombre pero diferentes parámetros. La primera función acepta dos parámetros enteros y el segundo método acepta dos parámetros de cadena.
Dependiendo del tipo de parámetros pasados, se llama al método apropiado y agrega dos enteros e imprime el resultado o concatena las dos cadenas e imprime la cadena resultante.
El programa Java se da a continuación:
|_+_|Producción:
Aquí hemos visto que la primera vez que pasamos dos parámetros enteros a added_func, se llama al primer método. En la segunda llamada a la función, pasamos dos parámetros de tipo String y, por lo tanto, se llama al segundo método sobrecargado.
Tipos de polimorfismo
Java admite dos tipos de polimorfismo:
- Polimorfismo en tiempo de compilación
- Polimorfismo en tiempo de ejecución
Como sugiere el nombre, el polimorfismo en tiempo de compilación se realiza en tiempo de compilación y el polimorfismo en tiempo de ejecución se realiza en tiempo de ejecución.
Como se muestra en la figura anterior, el polimorfismo en tiempo de compilación se implementa mediante la sobrecarga. Podemos sobrecargar el método o el operador. El polimorfismo en tiempo de ejecución se logra mediante la anulación.
En este tutorial, discutiremos en detalle el polimorfismo en tiempo de compilación. Analizaremos el polimorfismo en tiempo de ejecución en el siguiente tutorial.
Polimorfismo en tiempo de compilación en Java
El polimorfismo en tiempo de compilación también se conoce como 'polimorfismo estático'. Como parte del polimorfismo en tiempo de compilación, cualquier polimorfismo que se vaya a realizar, se realiza en tiempo de compilación.
En Java, el polimorfismo en tiempo de compilación se realiza mediante ' Sobrecarga de métodos ”. Usando la sobrecarga de métodos, podemos tener uno o más métodos con el mismo nombre y solo diferenciados en números o tipo u orden de parámetros.
La sobrecarga de métodos es la implementación más común del polimorfismo en tiempo de compilación en Java. Java también admite la sobrecarga de operadores.
¿Qué es la sobrecarga en Java en general?
La sobrecarga en Java es un proceso en el que hay más de un método con el mismo nombre y tipo de retorno, pero que difieren en el secuencia, el número y los tipos de argumentos. También se denomina sobrecarga de métodos en general.
Sobrecarga de métodos en Java
La sobrecarga de métodos es una implementación del polimorfismo en tiempo de compilación en Java. Cuando tenemos uno o más métodos con el mismo nombre y / o tipos de retorno pero diferentes listas de parámetros, decimos que hemos 'sobrecargado' los métodos.
Entonces, en una clase dada, podemos tener varios métodos con el mismo nombre pero diferentes listas de argumentos.
¿Cómo invocamos métodos sobrecargados? ¿O cómo sabe el compilador qué método debe llamarse?
La invocación del método exacto que coincide con la llamada se realiza según la lista de parámetros.
Ya hemos visto que una clase en Java puede tener más de un constructor. En el caso de los constructores, la lista de argumentos o los argumentos que acepta el constructor es diferente en todos los constructores. Este es un ejemplo de sobrecarga. Entonces, la sobrecarga de constructores es una forma básica de sobrecarga de métodos en Java.
Ahora veamos cómo sobrecargar un método en Java.
Java proporciona tres formas de sobrecarga de métodos según las variaciones en la lista de parámetros / argumentos.
# 1) Tipo de parámetros
Podemos sobrecargar métodos en Java dependiendo del tipo de datos de los parámetros.
la mejor aplicación de teléfono espía para Android
Considere el siguiente ejemplo en el que hemos proporcionado prototipos de tres métodos.
adición (int, int);
adición (int, float);
adición (String, String);
Como se ve desde arriba, tenemos el mismo nombre de método en los tres casos y el mismo número de parámetros, pero cada llamada al método tiene diferentes tipos de parámetros.
Entonces, siempre que los métodos tengan diferentes tipos de parámetros, podemos decir que los métodos están sobrecargados. Cuando invocamos el método, el compilador decide el tipo de datos del parámetro y, según el tipo de datos de la lista de parámetros proporcionada con la llamada al método, se llama al método apropiado.
Por ejemplo,si tenemos una llamada a un método como a continuación:
adición (3, 3,5);
En la llamada al método anterior, podemos ver que el primer parámetro es de tipo int mientras que el segundo parámetro es de tipo flotante. Cuando se encuentra la llamada anterior, el compilador resuelve la lista de parámetros y luego invoca el método apropiado, que es el segundo método anterior.
Ahora implementemos un programa Java completo para demostrar la sobrecarga del método en función de los tipos de datos de los parámetros.
|_+_|Producción:
# 2) Número de parámetros
Otra implementación de la sobrecarga de métodos es mediante la sobrecarga de métodos con un número diferente de parámetros en la llamada a la función.
Por ejemplo,consideremos las siguientes declaraciones de métodos:
addnum (int, int);
addnum (int, int, int);
En las declaraciones de método anteriores, la primera declaración de método tiene dos parámetros y la segunda declaración tiene tres parámetros. Cuando se invoca una función, el compilador inspecciona el número de parámetros y luego resuelve la llamada al método de manera apropiada.
El siguiente ejemplo muestra el programa que utiliza la sobrecarga de métodos en función del número de parámetros.
|_+_|Producción:
En este ejemplo, tenemos dos métodos sobrecargados en función del número de parámetros. El primer método toma un parámetro y el segundo método toma dos parámetros. En el método principal, llamamos a ambos métodos uno tras otro y el compilador resuelve la llamada a la función según el número de parámetros especificados.
# 3) Secuencia de parámetros
El tercer enfoque para implementar la sobrecarga de métodos se basa en la secuencia de parámetros en los métodos sobrecargados.
Considere el siguiente ejemplo de la declaración del método,
suma (int, flotante);
suma (flotante, int);
Aquí tenemos una suma de método sobrecargada. En la primera declaración, los parámetros son int y float. También en la segunda declaración, los parámetros son int y float, pero su orden en la lista de parámetros cambia.
Ahora el parámetro float aparece primero mientras que el parámetro int es el segundo. Podemos lograr una sobrecarga de métodos cambiando el orden de los parámetros.
los a continuación, el programa Java demuestra esto.
|_+_|Producción:
En el programa anterior, tenemos un método sobrecargado printParam que tiene parámetros int y char cuyo orden se cambia en dos declaraciones de método.
Casos no válidos de sobrecarga de métodos
Hasta ahora hemos discutido la sobrecarga de métodos usando la lista de parámetros. Todavía no hemos considerado el tipo de método de devolución. Tenga en cuenta que no sobrecargamos los métodos basados en tipos de retorno.
Por ejemplo, si dos métodos tienen el mismo nombre y las mismas listas de parámetros, pero diferentes tipos de retorno, no decimos que estos dos métodos estén sobrecargados. Este caso deja de ser válido por sobrecarga.
Entonces, si tenemos las siguientes declaraciones:
Yo int (int, int);
Suma de cadenas (int, int);
En este caso, el compilador emitirá un error ya que dos métodos no están sobrecargados. Por lo tanto, basándose únicamente en los tipos de devolución, los métodos no se diferencian.
Demostremos este caso inválido usando un programa Java.
realidad virtual compatible con xbox one|_+_|
En el programa anterior, el método myMethod tiene dos prototipos. Un prototipo toma dos parámetros int y devuelve double. El segundo prototipo de método toma dos parámetros int y devuelve un int.
Entonces, cuando compilamos este programa, obtenemos el siguiente resultado.
Producción:
El error de compilación anterior indica que el método se declara dos veces. Esto significa que el compilador no considera estos métodos sobrecargados simplemente en función del tipo de retorno.
Sobrecarga del operador
La sobrecarga del operador es un mecanismo de sobrecarga en el que se le da un significado diferente a un operador existente.
Como hemos comentado en la sección de introducción de este tutorial, un operador de adición '+' es un ejemplo clásico de sobrecarga de operadores.
Cuando los operandos de este operador son numéricos, el operador + devuelve el total de dos valores. Pero cuando los operandos son de tipo String, el resultado de la operación de suma es la cadena concatenada. Tenga en cuenta que en Java, solo podemos sobrecargar el operador + (suma).
Este operador realiza dos funciones:
- Sumar enteros o valores numéricos.
- Concatenar cadenas
Por lo tanto, el soporte de sobrecarga de operadores está limitado en Java, a diferencia de C ++, donde podemos sobrecargar casi todos los operadores salvo algunos como sizeof, dot operator, etc.
El siguiente programa demuestra la sobrecarga del operador en Java.
|_+_|Producción:
En el programa anterior, hemos sobrecargado el operador '+'. Cuando pasamos dos valores enteros al método sobrecargado, se devuelve una suma de dos enteros y cuando se pasan dos cadenas, el resultado es la cadena concatenada.
Ciertos puntos a tener en cuenta con respecto a la sobrecarga y el polimorfismo en tiempo de compilación.
- La sobrecarga de métodos es la forma de implementar el polimorfismo en tiempo de compilación que también se conoce como polimorfismo estático.
- El polimorfismo estático también se conoce como enlace temprano o enlace en tiempo de compilación.
- Como la vinculación de parámetros y la llamada de función ocurre en tiempo de compilación, la sobrecarga se llama vinculación en tiempo de compilación.
- Solo podemos sobrecargar el operador '+' en Java y realiza la suma de dos enteros o la concatenación de dos cadenas.
Preguntas frecuentes
P # 1) ¿Por qué necesitamos polimorfismo en Java?
Responder: El polimorfismo nos permite tener muchas implementaciones para un objeto. A través de la sobrecarga de métodos, no necesitamos tener demasiados métodos con nombres diferentes que sean difíciles de recordar. En cambio, podemos tener métodos sobrecargados para que podamos tener una implementación clara de los métodos que realizan funciones similares.
También ayuda en la implementación adecuada de la herencia que nos permite agregar más funcionalidad a las clases existentes de una manera más fácil.
P # 2) ¿Qué es el polimorfismo OOP?
Responder: La definición de polimorfismo de programación orientada a objetos se refiere a la capacidad de los lenguajes de programación para implementar un objeto en varias formas. El polimorfismo también se define como la capacidad de un programa para anular los métodos de la clase principal en la clase derivada para tener funcionalidad adicional.
P # 3) ¿Podemos sobrecargar y anular el método principal?
Responder: No. No podemos anular el método principal estático. Aunque podemos sobrecargar el método principal, JVM nunca llamará al método principal sobrecargado. Entonces, la mejor respuesta es no sobrecargar ni anular el método principal.
P # 4) ¿Se pueden sobrecargar los constructores?
Responder: Sí, podemos sobrecargar los constructores en Java de la misma forma que sobrecargamos los métodos Java. Los constructores suelen tener el mismo nombre pero un número diferente de argumentos.
P # 5) ¿Por qué es útil la sobrecarga de métodos?
Responder: Podemos escribir código limpio usando la sobrecarga de métodos y también se vuelve legible ya que tenemos métodos con el mismo nombre. Entonces, si estamos implementando funcionalidad para varios tipos de datos, entonces podemos sobrecargar los métodos y será más fácil separar el código.
Conclusión
El polimorfismo en Java significa que un objeto puede tener muchas formas. El polimorfismo en Java tiene dos tipos, es decir, polimorfismo en tiempo de compilación y polimorfismo en tiempo de ejecución. El polimorfismo en tiempo de compilación se realiza en tiempo de compilación. El polimorfismo en tiempo de compilación es estático y se implementa mediante la sobrecarga de métodos y la sobrecarga de operadores.
El polimorfismo en tiempo de ejecución se realiza en tiempo de ejecución y es dinámico. Se implementa mediante la invalidación de métodos.
En este tutorial, hemos visto las formas de implementar la sobrecarga de métodos. También hemos analizado en detalle la sobrecarga del operador. Java admite la sobrecarga del operador '+' únicamente.
=> Lea la serie de formación Easy Java.
Lectura recomendada
- Tutorial del método Java String contains () con ejemplos
- Método Java String length () con ejemplos
- Método Java substring () - Tutorial con ejemplos
- Tutorial de Java Float con ejemplos de programación
- Tutorial de JAVA para principiantes: más de 100 tutoriales prácticos en vídeo de Java
- TreeMap en Java - Tutorial con ejemplos de Java TreeMap
- Tutorial de cadenas de Java | Métodos de cadena de Java con ejemplos
- Java Double - Tutorial con ejemplos de programación