Boa noite pessoal.
Estou com uma duvida irritante aqui, mesmo parecendo ser uma coisa bem simples e essencial ainda não estou entendendo completamente.
Minha duvida é a seguinte:
Tendo uma classe Gerente que estende Funcionário , porque vejo muitas vezes em apostilas e exercícios alguem instanciando desta maneira:
Funcionario fun = new Gerente();
não poderia ser apenas Gerente ger = new Gerente();?
Gerente já não é um funcionario? então teria necessidade disso??
Da mesma forma uma classe Gerente implementa Autenticação:
Autenticação a = new Gerente();
Me desculpem se a pergunta é “tosca” , mas ainda não compreendi.
Obrigado a todos^^
[AJUDA]Polimorfismo:(
6 Respostas
Sim, e geralmente você vai declarar como o tipo mais específico, salvo raras exceções (como é o caso das listas).
Agora, o mais comum é o polimorfismo ocorrer em chamadas de funções, como essa:
public void darAumento(Funcionario f) {
f.setSalario(f.getSalario() * 1.10);
}
darAumento(gerente);
darAumento(diretor);
//darAumento(empregado);
tioola isto é polimorfismo 
Veja este Artigo do Imasters, está bem explicado.
http://imasters.com.br/artigo/17409/java/pizzaria-polimorfica
Sim, e geralmente você vai declarar como o tipo mais específico, salvo raras exceções (como é o caso das listas).Agora, o mais comum é o polimorfismo ocorrer em chamadas de funções, como essa:
public void darAumento(Funcionario f) { f.setSalario(f.getSalario() * 1.10); }
darAumento(gerente); darAumento(diretor); //darAumento(empregado);
Deixe-me ver se entendi.
Esse tipo de casos geralmente é usado em métodos para generalizar todas as classes filhas no caso gerente , diretor e outras que seriam funcionário?
E se fosse declarado como Gerente gerente = new Gerente(); e Diretor diretor = new Diretor(); ele não poderia ser usado nesse método?
Sim, todos seriam filhos de funcionário, nesse meu exemplo hipotético.
Estou falando que o normal é declarar do jeito que você falou:
Diretor diretor = new Diretor();
darAumento(diretor);
Mas note que a variável que recebe o diretor, no método, não é do tipo diretor, e sim funcionário. O que é “equivalente” a fazer:
Funcionario funcionario = new Diretor();
É por isso que o método funciona.
Sim, todos seriam filhos de funcionário, nesse meu exemplo hipotético.Estou falando que o normal é declarar do jeito que você falou:
Diretor diretor = new Diretor(); darAumento(diretor);Mas note que a variável que recebe o diretor, no método, não é do tipo diretor, e sim funcionário. O que é “equivalente” a fazer:
Funcionario funcionario = new Diretor();É por isso que o método funciona.
Agora sim entendi. Obrigado ViniGodoy me ajudou MUITO³
Analisando mais a fundo a relação de polimorfismo, o mesmo ocorre devido a forma como as classes são instanciadas? Ou seja, quando um classe estende outra, está levando consigo algumas características - métodos e propriedades - da classe Pai. Quando ocorrer a instanciação da classe filho, será necessário antes instanciar “partes” da classe Pai de forma a completar o objeto. Não sei se fui muito claro "/