Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Vantagem de usar "Funcionario gerente = new Gerente();"

Qual a vantagem de usar

Funcionario gerente1 = new Gerente();

em vez de

Gerente gerente2 = new Gerente();

se a minha referencia é do tipo funcionário, ela não enxergaria métodos específicos da classe Gerente. Sendo assim não consigo entender a vantagem em declarar desta forma sendo que eu perco os metodos específicos da classe q eu instanciei. Instanciar referencias assim (Gerente1), ele seria executado conforme um objeto Gerente(), porem os metodos exclusivos de Gerente() seria perdidos e não poderia ser usados. Qual a vantagem?

Eu achei que no video o professor deu um exemplo e explicou outra coisa, ou foi só impressão minha?

1 resposta
solução!

Boa noite, Bryan! Como vai?

A vantagem, dentre outras coisas, é poder reutilizar a mesma referência para outros funcionários. Por exemplos:

Funcionario f;

if (/* alguma condição */) {
     f = new Gerente();
} else {
     f = new Diretor();
}

// continuo manipulando a referência f ...

Como ambos são funcionários, então posso utilizar a referência f para os dois casos! Claro que isso só será válido de ser usado quando eu não precisar dos métodos específicos de cada classe! Em cenários assim teremos que utilizar referências específicas!

Além disso, com o polimorfismo podemos construir métodos que recebam qualquer tipo de Funcionario, por exemplo:

public class MinhaClasse {
     public void metodo1(Funcionario f) {
          // faço algo com o funcionário
     }
}

// em qualquer outra parte do meu código ...
MinhaClasse mc = new MinhaClasse();

mc.metodo1(new Gerente());  // isso funciona pois Gerente é um Funcionario

mc.metodo1(new Diretor());  // isso tbm funciona pois Diretor é um Funcionario

Grande abraço e bons estudos!