[RESOLVIDO]Polimorfismo  XML
Índice dos Fóruns » Certificação Java
Autor Mensagem
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Galera dado o codigo:



Eu olhando o codigo achei que ia imprimir "C", mas imprime "A"....Porque eu estava pensando que com o polimorfismo ele iria procurar primeiro no filho "C" se nao achasse ou o argumento nao atendesse em "C" ele iria para "A".

Tem como alguem me explicar por favor o pq?

This message was edited 1 time. Last update was at 14/01/2010 22:10:58

thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Em tempo de execução ele procura saber qual é o tipo de objeto é o objeto c1, como é do tipo A, ele executa o método do mesmo! Agora se, a variável c1 fosse C, então ele imprimiria "C"

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Ta mas veja só quero saber qual a diferença...






This message was edited 1 time. Last update was at 14/01/2010 16:01:08

evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Essa é minha duvida pq no primeiro exemplo ele nao chamou o método de "C", achava que deveria ser igual ao segundo exemplo...
thiago.correa
GUJ Master
[Avatar]

Membro desde: 26/03/2006 18:54:30
Mensagens: 1861
Offline

Mude, na tua classe A, o tipo do parâmetro para Object

---
"Se não puder ajudar, atrapalhe, afinal de contas o importante é participar!"
Thiago
[MSN]
TiagoTC
JavaTeenager

Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline

thiago.correa wrote:Em tempo de execução ele procura saber qual é o tipo de objeto é o objeto c1, como é do tipo A, ele executa o método do mesmo! Agora se, a variável c1 fosse C, então ele imprimiria "C"


Alguém me corrija se eu estiver errado, mas, para mim, o tipo é referente à classe a qual vc deu o new (C neste caso). A é meramente como você vai referenciar o objeto, mas não o tipo dele.

Everton, com relação à sua dúvida, realmente não consigo entender porque está imprimindo A também... Vamos esperar....

Eu achei que era porque public void m1(C c) não estava sobrescrevendo public void m1(A a). Por[em, se substituirmos


por



O código passa a imprimir "B". Ou seja, não tem nada haver com sobreescrita...

This message was edited 2 times. Last update was at 14/01/2010 16:26:20


Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Pois é mas na verdade A a = new B(), á variavel "a" é do tipo "A" mesmo, porém nao entendi sobre a questão da chamada do método. Eu trocando o parametro do método de "A" e passando pra Object igual o thiag.correa falou realmente ele chamou o método de "A" porém nao sei pq tb. Agora se eu troco os dois para Object o polimorfismo age e ele chama o método de B. Alguem da uma luz?

This message was edited 1 time. Last update was at 14/01/2010 16:46:03

TiagoTC
JavaTeenager

Membro desde: 09/02/2008 01:12:58
Mensagens: 189
Offline

evertonsilvagomesjava wrote:Pois é mas na verdade A a = new B(), á variavel "a" é do tipo "A" mesmo, porém nao entendi sobre a questão da chamada do método. Eu trocando igual o parametro do método de "A" e passando pra Object realmente ele chamou o método de "A" porém nao sei pq tb. Agora se eu troco os dois para Object o polimorfismo age e ele chama o método de B. Alguem da uma luz?


Everton, veja este exemplo:



Não é isso?

Pérola: "Nunca coloque seu celular em um forno de microondas, pois isso faz com que a bateria exploda" - Manuais de telefones celulares
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

Pois então se vc fizer: "animal" continua sendo um Animal.
vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

thiago.correa wrote:Em tempo de execução ele procura saber qual é o tipo de objeto é o objeto c1, como é do tipo A, ele executa o método do mesmo! Agora se, a variável c1 fosse C, então ele imprimiria "C"

é exatamente isso, tanto que no exemplo se vc trocar:

essa questão mostra algumas sutilezas que dificilmente a gente encontra num livro normal de Java
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

vmsb e pq aqui ele nao faz o mesmo?

vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

só lembrando que este código do exercicio é um exemplo de sobrecarga, não de sobreescrita por mudamos o argumento do método....

This message was edited 1 time. Last update was at 14/01/2010 17:04:44

vmsb11
Java Ninja

Membro desde: 25/08/2008 12:35:00
Mensagens: 251
Offline

evertonsilvagomesjava wrote:vmsb e pq aqui ele nao faz o mesmo?


isso aí é um sobreposição de método e aí o polimorfismo entra na hora de ele escolher o método a ser chamado
el_loko
JavaEvangelist

Membro desde: 30/10/2007 12:09:43
Mensagens: 357
Offline

vmsb11 wrote:só lembrando que este código do exercicio é um exemplo de sobrecarga, não de sobreescrita por mudamos o argumento do método....


É exactamente isso! No primeiro exemplo postado pelo everton fica claro que os métodos das classes B e C não sobrescrevem o método "m1" da classe A,
apenas usam a sobrecarga. Acho que isso explica o pq imprime "A" e não "C".
evertonsilvagomesjava
GUJ Master
[Avatar]

Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline

sopreposiçao seria o mesmo que sobreescrita? Porque pra mim aquilo era sobreescrita rsrs
 
Índice dos Fóruns » Certificação Java
Ir para:   
Powered by JForum 2.1.8 © JForum Team