Sobes.tech
Junior

O que é polimorfismo na programação?

sobes.tech IA

Resposta da IA

O polimorfismo é a capacidade de objetos de diferentes classes responderem de forma diferente à uma mesma chamada de método. Isso é alcançado através do uso de herança, classes abstratas e interfaces. Em C#, o polimorfismo manifesta-se através da sobrescrita (overriding) de métodos da classe base em classes derivadas e da sobrecarga (overloading) de métodos.

Exemplos de polimorfismo:

  1. Sobrescrita de métodos (Polimorfismo em tempo de execução): A classe derivada fornece sua própria implementação de um método declarado na classe base. Para isso, na classe base usa-se a palavra-chave virtual, e na derivada, override.

    // Classe base
    class Shape
    {
        // Método virtual que pode ser sobrescrito
        public virtual void Draw()
        {
            // Implementação padrão
        }
    }
    
    // Classe derivada 1
    class Circle : Shape
    {
        // Sobrescrita do método Draw
        public override void Draw()
        {
            // Implementação para um círculo
        }
    }
    
    // Classe derivada 2
    class Square : Shape
    {
        // Sobrescrita do método Draw
        public override void Draw()
        {
            // Implementação para um quadrado
        }
    }
    

    Neste caso, pode-se criar uma lista de objetos Shape e chamar o método Draw para cada um, sendo que a implementação específica de cada tipo de figura será executada.

  2. Sobrecarga de métodos (Polimorfismo em tempo de compilação): Vários métodos com o mesmo nome, mas com assinaturas diferentes (quantidade ou tipos de parâmetros) na mesma classe.

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

O polimorfismo favorece a criação de código mais flexível, extensível e de fácil manutenção. Permite escrever código genérico que pode trabalhar com objetos de diferentes tipos.