Sobes.tech
Junior

¿Qué es el polimorfismo en programación?

sobes.tech AI

Respuesta de la IA

El polimorfismo es la capacidad de objetos de diferentes clases para responder de manera diferente a la misma llamada de método. Se logra mediante el uso de herencia, clases abstractas e interfaces. En C#, el polimorfismo se manifiesta a través de la sobrescritura (overriding) de métodos de la clase base en las clases derivadas y la sobrecarga (overloading) de métodos.

Ejemplos de polimorfismo:

  1. Sobrescritura de métodos (Polimorfismo en tiempo de ejecución): La clase derivada proporciona su propia implementación de un método declarado en la clase base. Para ello, en la clase base se usa la palabra clave virtual, y en la derivada, override.

    // Clase base
    class Shape
    {
        // Método virtual que puede ser sobrescrito
        public virtual void Draw()
        {
            // Implementación por defecto
        }
    }
    
    // Clase derivada 1
    class Circle : Shape
    {
        // Sobrescritura del método Draw
        public override void Draw()
        {
            // Implementación para un círculo
        }
    }
    
    // Clase derivada 2
    class Square : Shape
    {
        // Sobrescritura del método Draw
        public override void Draw()
        {
            // Implementación para un cuadrado
        }
    }
    

    En este caso, se puede crear una lista de objetos Shape y llamar al método Draw para cada uno, y se ejecutará la implementación específica para cada tipo de figura.

  2. Sobrecarga de métodos (Polimorfismo en tiempo de compilación): Varios métodos con el mismo nombre pero con diferentes firmas (cantidad o tipos de parámetros) en una misma clase.

    class Calculator
    {
        // Método sobrecargado Add (para int)
        public int Add(int x, int y)
        {
            return x + y;
        }
    
        // Método sobrecargado Add (para double)
        public double Add(double x, double y)
        {
            return x + y;
        }
    }
    

El polimorfismo favorece la creación de código más flexible, extensible y fácil de mantener. Permite escribir código genérico que puede trabajar con objetos de diferentes tipos.