🎯 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.


Introdução

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.


🤔 O Que é Polimorfismo?

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>


❓ Por Que Usar Polimorfismo?

O polimorfismo não é apenas um conceito teórico; ele resolve problemas práticos no desenvolvimento de software:


Tipos de Polimorfismo em C#

Existem dois tipos principais de polimorfismo em C#:

  1. Polimorfismo de Sobrescrita (Runtime Polymorphism / Dynamic Method Dispatch):
  2. Polimorfismo de Sobrecarga (Compile-time Polymorphism):