1
resposta

Não entendi ...

No exemplo da aula o professor explica que se não usarmos as palavras reservadas virtual (no método da classe PAI) e override (no método da classe FILHA) o método que é chamado é o da classe PAI e não o da classe FILHA, o problema da aula foi justamente esse, tivemos que usar as palavras reservadas nos dois métodos por que ao executar o programa, o método que foi chamado foi o da classe Funcionário e não o da classe Diretor. Por isso o resultado da conta estava errado.

O que significa que no exercício proposto após a aula o método que era pra ser chamado era o da classe PAI e não da classe FILHA. Aconteceu ao contrário, eu não entendi o que houve ...

podem me dar outro exemplo, a não ser os que ja foram explicados nos tópicos de discussões anteriores?

1 resposta

Boa noite,

A instância foi criada a partir da mesma classe e não da classe derivada.

class Program
{
    static void Main(string[] args)
    {
        ContaCorrente contaCorrente = new ContaCorrente();

Então a referência que o compilador tem do método CalcularTaxaAdministrativa é da ContaCorrente!

Para utilizarmos métodos de uma classe pai, precisamos dizer "ContaCorrente terá referência de Conta". Assim:

class Program
{
    static void Main(string[] args)
    {
        Conta contaTeste = new ContaCorrente();

Agora sim estamos utilizando os métodos da Conta base e se o compilador não notar um Virtual ou Override, ele vai simplesmente executar o que está lhe sendo entregue, ou seja, os métodos da classe base.

O polimorfismo é a possibilidade de sobreescrever esses métodos. E assim com uma classe pai, mãe, mestra, base, podemos criar diversos objetos apontando para está referência e sobreescrever seus métodos dependendo do comportamento que desejamos para cada uma delas.