1
resposta

A dúvida está no Gerenciador

Tive a mesma dúvida que o Bruno e acredito que seja por conta do Gerenciador de bonificação.

No exemplo do vídeo, mesmo antes do uso *override* e *virtual* o sistema calculava a bonificação da classe filha usando o método da classe mãe. 
Por analogia, no exercício a classe filha usaria a classe mãe também.

Se entendi direito a diferença está no fato de no exemplo do vídeo termos usado um gerenciador que mesmo recebendo um objeto da classe filha (diretor) se apropriava como um objeto da classe mãe *funcionario* para cálculo  da bonificação que era feito no método da classe mãe *funcionario*.
Nesse ponto ocorreu o polimorfismo, certo?

No exercício o objeto da classe filha chamou o método da classe filha, portanto resultado 0

É isso?
1 resposta

Olá João!

Sem o virtual e override o uso do GetBonificacao() será o do tipo que é declarado o objeto, por isso a variável robertaTeste ficou com o método da classe Funcionario. Neste caso foi apenas uma repetição do nome do método, tanto que o método estava sublinhado em verde.

Ao usar o virtual e override, aí sim ocorre o polimorfismo, tanto que no exemplo, mesmo declarando robertaTeste como Funcionario, é usado o GetBonificacao() de Diretor, pois é este o tipo da variável roberta, ao qual foi referência para robertaTeste.

Quanto ao exercício, o tipo é ContaCorrente e essa classe já tem seu próprio método de CalcularTaxaAdministrativa() que com certeza ficaria sublinhado de verde no Visual Studio. Se tivesse sido declarado como Conta aí sim o retorno seria 1, pois não houve sobrescrita de métodos.

Bons estudos!