[AJUDA]Polimorfismo:(

6 respostas
T
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  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^^

6 Respostas

ViniGodoy

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);
gRoOve

tioola isto é polimorfismo :slight_smile:
Veja este Artigo do Imasters, está bem explicado.
http://imasters.com.br/artigo/17409/java/pizzaria-polimorfica

T

ViniGodoy:
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?

ViniGodoy

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.

T

ViniGodoy:
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³

gRoOve

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 "/

Criado 1 de fevereiro de 2011
Ultima resposta 1 de fev. de 2011
Respostas 6
Participantes 3