2
respostas

Polimorfismo, sobrecarga e sobreescrita

Ainda não consegui entender a direrença entre polimorfismo, sobrecarga e sobreescrita. Poderiam me explicar qual a diferença e se possível dar exemplos? Grata desde já.

2 respostas

Olá, Emanuelle. Tudo bom? Também estou aprendendo C# então vou dar uma ideia aqui do que eu creio que sejam todas essas questões, ok? Polimorfismo te permite instanciar um objeto dentro de outro objeto, ou chamar uma função que receba um objeto passando algum outro objeto pra ela. Por exemplo:

const Animal    *a = new Animal();
const Animal     *b = new Dog();
const Animal     *c = new Cat();

(escrevi em C++ mas a ideia é a mesma). Como tanto Cat quanto Dog herdam de Animal, você consegue instanciar um Animal chamando o construtor de Cat : )

A sobrecarga, te permite literalmente sobrecarregar uma função, dando a ela vários comportamentos diferentes baseado no protótipo dessa função. Por exemplo:

const Animal *a = new Dog();
const Animal *b = new Dog("cachorrinho");
const Animal *c = new Dog("cachorrinho", 13);

Aqui temos 3 construtores, o nome da função é exatamente o mesmo (Dog()), porém, cada um deles possui um comportamento diferente. No primeiro exemplo, o construtor Dog é chamado de padrão, onde ele pode, por exemplo, chamar o cachorrinho de Rex e dar a idade dele de 0. O segundo construtor poderia atribuir o nome do cachorro de "cachorrinho" e dar a idade dele de 0, o terceiro seria chamado de cachorrinho e teria a idade 13. Isso é a sobrecarga. Já sobrescrita, você pode imaginar que o Animal possui um método chamado "andar". Esse método faz com que o Animal ande a 2km por hora. O gato, então, herda de Animal, logo, ele pode usar o método andar. Mas imagina que o gato anda a 5km por hora. Nesse caso, a classe Gato precisa sobrescrever o método andar, para garantir que quando você tente andar com o gato, ele vai andar a 5km. Espero ter conseguido ajudar com algo. De qualquer forma, como eu disse, ainda sou iniciante no assunto então recomendo desconfiar de tudo que eu falei e buscar validar essas informações haha

Bom dia Emanuelle, tudo bom?

No polimorfismo o principio é que um objeto pode invocar o método de uma classe em que métodos possuindo a mesma assinatura ( nome + conjunto de parâmetros) possam responder de maneiras diferentes.

A sobrecarga é um exemplo de polimorfismo em que uma classe possui variações de um mesmo método. Exemplo:

public class Pintor{
 public string PintarParede( int a, int b){
     //Implementação
  }
  public string PintarParede( double a, double b){
          //Implementação
  }
   public string PintarParede( String a, String b){
        //Implementação
}

Na sobrescrita, temos em uma classe derivada a redefinição de um comportamento, que foi definido antes na classe base. Por exemplo:

public class Funcionario
{
    public virtual void CalcularSalario()
    {
        // implementação
    }
}

public class Gerente:Funcionario
{
    public override  void CalcularSalario()
    {
        // implementação específica para gerente.
    }
}

No C# para um método possa ser sobrescrito é necessário que na classe base o mesmo seja assinalado como virtual.

Agradeço ao Rodrigo, pela contribuição.

Espero ter contribuído e, qualquer coisa, estamos à disposição!

Abraços e bons estudos 😄


Caso este post tenha lhe ajudado, por favor, marcar como solucionado ✓. Bons Estudos!