🎯 Objetivo: Neste capítulo, você irá consolidar o que aprendeu sobre classes, herança e interfaces, explorando um dos conceitos mais poderosos da Programação Orientada a Objetos: o Polimorfismo.
As classes nos dão moldes para criar objetos, a herança permite reutilizar e estender esses moldes, e as interfaces definem contratos de comportamento. Agora, vamos juntar tudo isso com o Polimorfismo.
Polimorfismo, em sua essência, significa "muitas formas". Em C#, ele nos permite tratar objetos de diferentes classes de maneira uniforme, desde que essas classes compartilhem uma ancestralidade (seja por herança de uma classe base ou pela implementação de uma interface). É a capacidade de um objeto assumir múltiplas formas durante a execução do programa.
Imagine que você tem um controle remoto universal. Com ele, você pode ligar uma TV, um aparelho de som ou um DVD player, usando o mesmo botão "Ligar". O controle remoto não precisa saber os detalhes de como cada aparelho liga; ele apenas envia o comando "Ligar", e cada aparelho reage à sua própria maneira.
Em C#, o Polimorfismo funciona de forma semelhante. Ele permite que você declare uma variável de um tipo mais genérico (uma classe base ou uma interface) e atribua a ela um objeto de um tipo mais específico (uma classe derivada ou uma classe que implementa a interface). Quando você chama um método através dessa variável genérica, o C# sabe qual método executar com base no tipo real do objeto que está referenciado naquele momento.
<aside> 💡
Ponto Chave: Polimorfismo é sobre a capacidade de um objeto de assumir diferentes formas, ou de ser tratado como um tipo mais genérico, enquanto mantém e executa seu comportamento específico definido pelo seu tipo real.
</aside>
O polimorfismo não é apenas um conceito teórico; ele resolve problemas práticos no desenvolvimento de software:
Pato que também herda de Animal, ela automaticamente funcionará no seu foreach do zoológico sem mudar uma linha de código nesse loop.Animal) em vez de muitos tipos concretos (Cachorro, Gato, Vaca), simplificando a lógica principal da sua aplicação.Existem dois tipos principais de polimorfismo em C#:
virtual e override (ou implementação de interface).Console.WriteLine() pode receber diferentes tipos de dados (WriteLine(string), WriteLine(int), WriteLine(double)).