Breaking

Post Top Ad

Your Ad Spot

jueves, 19 de diciembre de 2019

Polimorfismo Java

En este tutorial, aprenderemos sobre el polimorfismo, los diferentes tipos de polimorfismo y cómo implementarlos en Java con la ayuda de ejemplos.
El polimorfismo es un concepto importante de la programación orientada a objetos. Simplemente significa más de una forma. Es decir, la misma entidad (método u operador u objeto) se comporta de manera diferente en diferentes escenarios. Por ejemplo,
El +operador en Java se utiliza para realizar dos funciones específicas. Cuando se usa con números (enteros y números de coma flotante), realiza la suma.
  1. int a = 5;
  2. int b = 6;
  3. int sum = a + b; // Output = 11
Y cuando usamos el +operador con cadenas, realiza la concatenación de cadenas. Por ejemplo,
  1. String firstName = "abc ";
  2. String lastName = "xyz";
  3. name = firstName + lastName; // Output = abc xyz

Tipos de polimorfismo

En Java, el polimorfismo se puede dividir en dos tipos:
  • Polimorfismo en tiempo de ejecución
  • Polimorfismo en tiempo de compilación

Polimorfismo en tiempo de ejecución

En Java, el polimorfismo en tiempo de ejecución se puede lograr mediante la anulación del método.
Supongamos que se crea el mismo método en la superclase y sus subclases. En este caso, el método que se llamará depende del objeto utilizado para llamar al método. Por ejemplo,

Ejemplo 1: anulación del método

  1. abstract class Animal {
  2. public abstract void makeSound();
  3. }
  4. class Dog extends Animal {
  5. @override
  6. public void makeSound() {
  7. System.out.println("Bark bark..");
  8. }
  9. }
  10. class Cat extends Animal {
  11. @override
  12. public void makeSound() {
  13. System.out.println("Meow meow..");
  14. }
  15. }
  16. class Main {
  17. public static void main(String[] args) {
  18. Dog d1 = new Dog();
  19. d1.makeSound();
  20. Cat c1 = new Cat();
  21. c1.makeSound();
  22. }
  23. }
Cuando ejecutamos el programa, la salida será:
Ladrar ladrar…
Miau miau...
Para saber cómo funciona la anulación de métodos, visite la anulación de métodos en Java .
En el ejemplo anterior, el método makeSound()tiene implementaciones diferentes en dos clases diferentes. Cuando ejecutamos el programa,
  • la expresión d1.makeSound()llamará al método de la clase Dog . Es porque d1 es un objeto de la clase Dog .
  • la expresión c1.makeSound()llamará al método de la clase Cat . Es porque c1 es un objeto de la clase cat.
Polimorfismo en tiempo de ejecución en Java utilizando anulación de métodos
El método que se llamará se determina durante la ejecución del programa. Por lo tanto, la anulación del método es un polimorfismo en tiempo de ejecución.

Polimorfismo en tiempo de compilación

El polimorfismo en tiempo de compilación se puede lograr mediante la sobrecarga de métodos y la sobrecarga de operadores en Java.

Método de sobrecarga

En una clase Java, podemos crear métodos con el mismo nombre si difieren en los parámetros. Por ejemplo,
  1. void func() { ... }
  2. void func(int a) { ... }
  3. float func(double a) { ... }
  4. float func(int a, float b) { ... }
Esto se conoce como sobrecarga de métodos en Java.
Tomemos un ejemplo funcional de sobrecarga de métodos.

Ejemplo 3: sobrecarga de métodos

  1. class Demo {
  2. public void displayPattern(){
  3. for(int i = 0; i < 10; i++) {
  4. System.out.print("*");
  5. }
  6. }
  7. public void displayPattern(char symbol) {
  8. for(int i = 0; i < 10; i++) {
  9. System.out.print(symbol);
  10. }
  11. }
  12. }
  13. class Main {
  14. public static void main(String[] args) {
  15. Demo d1 = new Demo();
  16. d1.displayPattern();
  17. System.out.println("\n");
  18. d1.displayPattern('#');
  19. }
  20. }
Cuando ejecutamos el programa, la salida será:
**********
##########
En el programa anterior, el displayPattern()método está sobrecargado.
  • Si llamamos al método sin pasar ningún argumento, *se crea un patrón de .
  • Si llamamos al método pasando un carácter como argumento, se crea un patrón de ese carácter.
Tiempo de compilación del polimorfismo en Java utilizando la sobrecarga de métodos
Para obtener más información sobre la sobrecarga de métodos, visite Sobrecarga de métodos

Método Java Sobrecarga Vs Método Overriding

  • En el caso de la anulación de métodos, los métodos deben estar dentro de diferentes clases. Mientras que, en el caso de sobrecarga de métodos, los métodos deben estar dentro de la misma clase.
  • La anulación del método se realiza en tiempo de ejecución, mientras que la sobrecarga del método se realiza en tiempo de compilación.

Sobrecarga del operador

Algunos operadores en Java se comportan de manera diferente con diferentes operandos. Por ejemplo,
  • + el operador está sobrecargado para realizar la suma numérica, así como la concatenación de cadenas, y
  • a los operadores les gusta &|!están sobrecargados para operaciones lógicas y bit a bit.
Veamos cómo se sobrecarga un operador en Java.
El +operador en Java se utiliza para realizar dos funciones específicas. Cuando se usa con números (enteros y números de coma flotante), realiza la suma. Por ejemplo,
  1. int a = 5;
  2. int b = 6;
  3. int sum = a + b; // Output = 11
Y cuando usamos el +operador con cadenas, realiza la concatenación de cadenas. Por ejemplo,
  1. String firstName = "abc ";
  2. String lastName = "xyz";
  3. name = firstName + lastName; // Output = abc xyz
En lenguajes como C ++, podemos definir operadores para que funcionen de manera diferente para diferentes operandos. Sin embargo, Java no admite la sobrecarga del operador definido por el usuario.

¿Por qué polimorfismo?

El polimorfismo nos permite crear código consistente. Por ejemplo,
Supongamos que necesitamos representar un círculo y un cuadrado. Para hacerlo, podemos crear una clase Polygon y heredar dos subclases Circle y square de ella. En este caso, tiene sentido crear un método que tenga el mismo nombre render()en ambas subclases en lugar de crear métodos con nombres diferentes.
En nuestro ejemplo de sobrecarga de métodos, hemos utilizado el mismo nombre de método displayPattern()para mostrar dos patrones diferentes para mantener la coherencia.
El print()método en Java también es un ejemplo de polimorfismo (sobrecarga de métodos). El mismo método se utiliza para imprimir los valores de diferentes tipos, como charintStringetc. También podemos utilizar el mismo método para imprimir múltiples valores de una vez.

Variables polimórficas

En Java, las variables de objeto (variables de instancia) representan el comportamiento de las variables polimórficas. Esto se debe a que las variables de objeto de una clase pueden referirse tanto a objetos de su clase como a objetos de sus subclases. Por ejemplo,
  1. class Animal {
  2. public void displayInfo() {
  3. System.out.println("I am an animal.");
  4. }
  5. }
  6. class Dog extends Animal {
  7. @override
  8. public void displayInfo() {
  9. System.out.println("I am a dog.");
  10. }
  11. }
  12. class Main {
  13. public static void main(String[] args) {
  14. // declaration of object variable a1 of the Animal class
  15. Animal a1;
  16. // object creation of the Animal class
  17. a1 = new Animal();
  18. a1.displayInfo();
  19. // object creation of the dog class
  20. a1 = new Dog();
  21. a1.displayInfo();
  22. }
  23. }
Cuando ejecutamos el programa, la salida será:
Soy un animal
Soy un perro.
En el ejemplo anterior, hemos creado una variable de objeto a1 de la clase Animal . Aquí, a1 es una variable polimórfica.
Es porque,
  • En la declaración a1 = new Animal()a1 se refiere al objeto de la clase Animal .
  • En la declaración a1 = new Dog()a1 se refiere al objeto de la clase Perro .
Este es un ejemplo de upcasting en Java. Visite upcasting y downcasting en Java para obtener más información.

No hay comentarios.:

Publicar un comentario

Dejanos tu comentario para seguir mejorando!

Post Top Ad

Your Ad Spot

Páginas