English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java lista (List)

Java cola (cola)

Mapa de Java

Conjunto de Java

Java entrada/salida (I/O)

Lector de Java/Writer

Temas de Java

Polimorfismo en Java

En este tutorial, aprenderemos sobre el polimorfismo a través de ejemplos, diferentes tipos de polimorfismo y cómo se implementan en Java.

El polimorfismo es un concepto importante de programación orientada a objetos. Simplemente significa que hay más de una forma. Es decir, el comportamiento de la misma entidad (método, operador o objeto) puede variar en diferentes situaciones. Por ejemplo,

En Java+Los operadores se utilizan para ejecutar dos funciones específicas. Cuando se utilizan con números (enteros y flotantes), se realiza una operación de adición.

int a = 5;
int b = 6;
int sum = a + b;     //  sum = 11

Cuando sumamos+Cuando se utiliza un operador con una cadena, realiza una concatenación de cadenas. Por ejemplo,

String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName;     //  name = 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, se puede lograr la polimorfismo en tiempo de ejecución a través de la sobrescripción de métodos.

Supongamos que se creó el mismo método en la clase padre y sus subclases. En este caso, el método a llamar depende del objeto utilizado para llamar al método. Por ejemplo,

示例1Método de reescribir

clase abstracta Animal {
   public abstract void hacerSonido();
}
class Dog extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Bark bark..");
   }
}
class Cat extends Animal {
   @Override
   public void makeSound() {
      System.out.println("Meow meow..");
   }
}
class Main {
   public static void main(String[] args) {
     Dog  d1 = new Dog();
      d1.makeSound();
      Cat c1 = new Cat();
      c1.makeSound();
   }
}

salida:

Bark bark…
Meow-meow...

Para entender cómo funciona la sobrescritura de métodos, visiteSobrecarga de métodos en Java.

En el ejemplo anterior, el método makeSound() tiene diferentes implementaciones en dos clases diferentes. Al ejecutar el programa

  • La expresión d1.makeSound() llamará al método de la clase Dog. Esto se debe a que d1es un objeto de la clase Dog.

  • La expresión c1.makeSound() llamará al método de la clase Cat. Esto se debe a que c1es un objeto de la clase Cat.

Se determina el método que se va a llamar durante la ejecución del programa. Por lo tanto, la sobrescritura de métodos es polimorfismo en tiempo de ejecución.

Polimorfismo en tiempo de compilación

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

Sobrecarga de métodos

En una clase Java, si los parámetros son diferentes, se puede crear un método con el mismo nombre. Por ejemplo,

void func() { ... }
void func(int a) { ... }
float func(double a) { ... }
float func(int a, float b) { ... }

Esto se conoce en Java como sobrecarga de métodos.

Vamos a tomar como ejemplo el sobrecarga de métodos.

示例3:方法重载

class Demo {
 public void displayPattern(){
   for(int i = 0; i < 10; i++) {
     System.out.print("*");
   }
 }
 public void displayPattern(char symbol) {
   for(int i = 0; i < 10; i++) {
     System.out.print(symbol);
   }
 }
}
class Main {
 public static void main(String[] args) {
   Demo d1 = new Demo();
   d1.displayPattern();
   System.out.println("\n");
   d1.displayPattern('#');
 }
}

salida:

**********
##########

En el programa anterior, el método displayPattern() se ha sobrecargado.

  •  Si llamamos al método sin pasar ningún parámetro, se creará * Patrón de caracteres.

  •  Si llamamos a este método pasando un carácter como parámetro, se creará un patrón de #.

Para obtener más información sobre la sobrecarga de métodos, visiteSobrecarga de métodos

Sobrecarga de métodos en Java VS Sobrescritura de métodos

  • En el caso de la sobrescritura de métodos, los métodos deben estar en diferentes clases. Sin embargo, en el caso de la sobrecarga de métodos, los métodos deben estar en la misma clase.

  •  La sobrescritura de métodos se ejecuta en tiempo de ejecución, mientras que la sobrecarga de métodos se ejecuta en tiempo de compilación.

Sobrecarga de operadores

Algunos operadores en Java tienen comportamientos diferentes para diferentes operandos. Por ejemplo,

  • + Los operadores se sobrecargan para realizar la adición numérica y la concatenación de cadenas.

  • &、| y ! se sobrecargan para operaciones lógicas y bit a bit.

Vamos a ver cómo se sobrecargan los operadores en Java.

En Java+Los operadores se utilizan para ejecutar dos funciones específicas. Cuando se utilizan con números (enteros y flotantes), se realiza una operación de adición. Por ejemplo,

int a = 5;
int b = 6;
int sum = a + b;     //  sum = 11

Cuando sumamos+Cuando se utiliza un operador con una cadena, realiza una concatenación de cadenas. Por ejemplo,

String firstName = "abc ";
String lastName = "xyz";
name = firstName + lastName;     //  name = abc xyz

En lenguajes como C ++En tales lenguajes, podemos definir operadores para tratar diferentes operandos de manera diferente. Sin embargo, Java no admite la sobrecarga de operadores definida por el usuario.

¿Por qué el polimorfismo?

El polimorfismo nos permite crear código consistente. Por ejemplo,

Supongamos que necesitamos dibujar un círculo y un cuadrado. Para esto, podemos crear una clase Polygon, de la que se deriven dos subclases Circle y square. En este caso, es necesario crear en ambas subclases un método con el mismo nombre render() en lugar de crear métodos con nombres diferentes.

En nuestro ejemplo de sobrecarga de métodos, usamos el mismo nombre de método displayPattern() para mostrar dos patrones diferentes para mantener la coherencia.

El método print() en Java también es un ejemplo de polimorfismo (sobrecarga de métodos). El mismo método se utiliza para imprimir valores de diferentes tipos, como char, int, String, etc. También podemos usar el mismo método para imprimir varios valores a la vez.

Variable polimórfica

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 a objetos de su propia clase y a objetos de subclases. Por ejemplo,

class Animal {
   public void displayInfo() {}}
      System.out.println("Soy un animal.");
   }
}
class Dog extends Animal {
   @Override
   public void displayInfo() {}}
      System.out.println("Soy un perro.");
   }
}
class Main {
   public static void main(String[] args) {
    
      //declaración de la variable de objeto de la clase Animal a1
      Animal a1;
    
     //creación de objetos de la clase Animal
      a1 = new Animal();
      a1.displayInfo();
     //creación de objetos de la clase Dog
      a1 = new Dog();
      a1.displayInfo();
   }
}

salida:

Soy un animal.
Soy un perro.

en el ejemplo anterior, creamos la variable de objeto de la clase Animal a1. Aquí, a1es una variable polimórfica.

porque,

  • en la declaración a1 = new Animal(), a1referencia al objeto de la clase Animal.

  • en la declaración a1 = new Dog(), a1referencia al objeto de la clase Dog.

Este es un ejemplo de conversión ascendente en Java. Para obtener más información, visiteJava conversión ascendente y descendente.