Polimorfismo en Java

La palabra polimorfismo significa tener muchas formas. En palabras simples, podemos definir el polimorfismo como la capacidad de un mensaje para mostrarse en más de una forma. 

Ilustración de la vida real: polimorfismo

Una persona al mismo tiempo puede tener diferentes características. Como un hombre al mismo tiempo es padre, esposo, empleado. Entonces, la misma persona posee un comportamiento diferente en diferentes situaciones. Esto se llama polimorfismo. 
El polimorfismo se considera una de las características importantes de la programación orientada a objetos. El polimorfismo nos permite realizar una sola acción de diferentes maneras. En otras palabras, el polimorfismo le permite definir una interfaz y tener múltiples implementaciones. La palabra «poli» significa muchos y «morfos» significa formas, por lo que significa muchas formas.

Tipos de polimorfismo

En Java, el polimorfismo se divide principalmente en dos tipos: 

  • Polimorfismo en tiempo de compilación
  • Polimorfismo en tiempo de ejecución

Tipo 1: polimorfismo en tiempo de compilación

También se conoce como polimorfismo estático. Este tipo de polimorfismo se logra mediante sobrecarga de funciones o sobrecarga de operadores. 

Nota: Pero Java no admite la sobrecarga de operadores.

Sobrecarga de métodos : cuando hay múltiples funciones con el mismo nombre pero diferentes parámetros, se dice que estas funciones están sobrecargadas . Las funciones se pueden sobrecargar por un cambio en el número de argumentos o/y un cambio en el tipo de argumentos.

Ejemplo 1 

Java

// Java Program for Method overloading
// By using Different Types of Arguments 
 
// Class 1
// Helper class
class Helper {
 
    // Method with 2 integer parameters
    static int Multiply(int a, int b)
    {
 
        // Returns product of integer numbers
        return a * b;
    }
 
    // Method 2
    // With same name but with 2 double parameters
    static double Multiply(double a, double b)
    {
 
        // Returns product of double numbers
        return a * b;
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Calling method by passing
        // input as in arguments
        System.out.println(Helper.Multiply(2, 4));
        System.out.println(Helper.Multiply(5.5, 6.3));
    }
}
Producción: 

8
34.65

 

Ejemplo 2

Java

// Java program for Method Overloading
// by Using Different Numbers of Arguments
 
// Class 1
// Helper class
class Helper {
 
    // Method 1
    // Multiplication of 2 numbers
    static int Multiply(int a, int b)
    {
 
        // Return product
        return a * b;
    }
 
    // Method 2
    // // Multiplication of 3 numbers
    static int Multiply(int a, int b, int c)
    {
 
        // Return product
        return a * b * c;
    }
}
 
// Class 2
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Calling method by passing
        // input as in arguments
        System.out.println(Helper.Multiply(2, 4));
        System.out.println(Helper.Multiply(2, 7, 3));
    }
}
Producción: 

8
42

 

Tipo 2: polimorfismo en tiempo de ejecución

También se conoce como envío de método dinámico. Es un proceso en el que una llamada de función al método anulado se resuelve en tiempo de ejecución. Este tipo de polimorfismo se logra mediante la anulación de métodos. La anulación de métodos , por otro lado, ocurre cuando una clase derivada tiene una definición para una de las funciones miembro de la clase base. Se dice que esa función base está anulada .

Ejemplo

Java

// Java Program for Method Overriding
 
// Class 1
// Helper class
class Parent {
 
    // Method of parent class
    void Print()
    {
 
        // Print statement
        System.out.println("parent class");
    }
}
 
// Class 2
// Helper class
class subclass1 extends Parent {
 
    // Method
    void Print() { System.out.println("subclass1"); }
}
 
// Class 3
// Helper class
class subclass2 extends Parent {
 
    // Method
    void Print()
    {
 
        // Print statement
        System.out.println("subclass2");
    }
}
 
// Class 4
// Main class
class GFG {
 
    // Main driver method
    public static void main(String[] args)
    {
 
        // Creating object of class 1
        Parent a;
 
        // Now we will be calling print methods
        // inside main() method
 
        a = new subclass1();
        a.Print();
 
        a = new subclass2();
        a.Print();
    }
}
Producción: 

subclass1
subclass2

 

Explicación de salida: 

Aquí en este programa, cuando se crea un objeto de clase secundaria, se llama al método dentro de la clase secundaria. Esto se debe a que el método de la clase principal está anulado por la clase secundaria. Dado que el método se anula, este método tiene más prioridad que el método principal dentro de la clase secundaria. Entonces, se ejecuta el cuerpo dentro de la clase secundaria.

Publicación traducida automáticamente

Artículo escrito por PREMMAURYA y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *