| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 14:18:04
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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
|
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 15:49:36
|
thiago.correa
GUJ Master
![[Avatar]](/images/avatar/c37f9e1283cbd4a6edfd778fc8b1c652.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:00:38
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:02:27
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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...
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:05:48
|
thiago.correa
GUJ Master
![[Avatar]](/images/avatar/c37f9e1283cbd4a6edfd778fc8b1c652.jpg)
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
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:22:38
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:38:42
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:46:54
|
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 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 16:50:30
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline
|
Pois então se vc fizer: "animal" continua sendo um Animal.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:01:00
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:02:31
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
Membro desde: 23/08/2009 13:14:01
Mensagens: 1924
Offline
|
vmsb e pq aqui ele nao faz o mesmo?
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:03:01
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:04:19
|
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
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:12:15
|
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".
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 14/01/2010 17:12:45
|
evertonsilvagomesjava
GUJ Master
![[Avatar]](/images/avatar/6370988b46be58caec00d925d91d2f99.png)
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
|
|
|
 |
|
|