Bem a dúvida é a seguinte: Qual o motivo exatamente que a primeira referência não funciona?
Todo Gerente é um Funcionário, pois Gerente estende funcionário, então pq não compila?
Bateu uma grande dúvida agora.
Valeu.
Vc não pode converter um Funcionário pra Gerente. Um Gerente é um Funcionário (por isso a segunda associação funciona), mas nem todo Funcionário será um Gerente.
Agora, transformar um Funcionario (puro) em Gerente não rola. Vai gerar um ClassCastException.
Andre_Brito
Nem todo funcionário é um gerente, certo?
Portanto, um funcionário que não seja gerente (na vida real), não “cabe” no cargo.
Já, todo gerente é um funcionário. Então todo gerente “cabe” num funcionário.
rmala_ti
dreamspeaker:
Vc não pode converter um Funcionário pra Gerente. Um Gerente é um Funcionário (por isso a segunda associação funciona), mas nem todo Funcionário será um Gerente.
Nesse caso, vc precisa fazer um cast explicito.
Gerentegerente=(Gerente)funcionario;
Agora ficou mais tranquilo.
Mas o que acontece quando se faz um cast explícito transformando um funcionário em gerente? É isso mesmo que eu entendi?
Obrigado.
P
pardal_nb
Você está por sua conta e risco…
para fazer um cast desse tipo vc tem q ter a certeza que está fazendo a coisa certo…(vc tem q ter certeza de q AQUELE funcionario É UM Gerente)
por exemplo, vc está recuperando um objeto do banco de dados e vc SABE q esse objeto é um Funcionario, então vc pode fazer o cast, senao será lancada uma exceçao
peczenyj
Um cast é descoberto em tempo de compilação pois...
classFuncionario{}classGerenteextendsFuncionario{}publicclassA{publicstaticvoidmain(String[]args){x();z();y();// aqui vai dar problema}publicstaticvoidz(){Gerenteg=newGerente();Funcionariof=(Funcionario)g;Gerentegg=(Gerente)f;System.out.println("Gerente -> Funcionario -> Gerente");}publicstaticvoidy(){Funcionariof=newFuncionario();Gerenteg=(Gerente)f;System.out.println("Funcionario f -> Gerente g");}publicstaticvoidx(){Gerenteg=newGerente();Funcionariof=(Funcionario)g;System.out.println("Gerente g -> Funcionario f");}}
Perceba que eu posso ter um Funcionario que é um Gerente (Polimorfismo). Nesse caso eu posso fazer o cast "de volta". Agora um Funcionario "normal" não.
LPJava
pense dessa forma… nem todo funcionario é gerente… mais um gerente ele é funcionario…
Entao qdo vc diz ali, //nao funciona é pq nem todo funciona é gerente, vc na empresa tem o pessoal serviço gerais, a secretaria, o analista etc… e todos sao funcionarios…
Ja no outro que funciona vc diz… olha meu gerente é um funcionario q claro que sim…
Agora se vc fizer uma pesquisa no mundo da ADM vai ver que funcionrio nao existe mais agora é Colaborador rs.
Um exemplo semelhante: carro, moto todos sao veiculos… mais nem todo veiculo… é um carro, uma moto por exemplo :d
flw!
rmala_ti
Nossa galera, agora eu entendi mesmo!
Muito obrigado a todos vocês pela grande aula que me deram.
OO é difícil no princípio, mas depois que começa a entender os conceitos até que fica divertido.
Abração.
peczenyj
rmalati:
Nossa galera, agora eu entendi mesmo!
Muito obrigado a todos vocês pela grande aula que me deram.
OO é difícil no princípio, mas depois que começa a entender os conceitos até que fica divertido.
Abração.
Vc vai ter uma surpresa quando descobrir o Duck Typing do Ruby
rmala_ti
peczenyj:
rmalati:
Nossa galera, agora eu entendi mesmo!
Muito obrigado a todos vocês pela grande aula que me deram.
OO é difícil no princípio, mas depois que começa a entender os conceitos até que fica divertido.
Abração.
Vc vai ter uma surpresa quando descobrir o Duck Typing do Ruby :)
Ah já ouvi dizer muito bem do Ruby, mas é demais pra minha cabeça, deixa eu aprender Java primeiro. hehheehe.
Valeu.