| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 09:06:02
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
Oi galera..
tenho estas classes
o que imprime:
true
metodo sobrescrito -- FILHO
metodo nao sobrescrito -- classe pai
metodo sobrescrito -- FILHO
achei estranho o comportamento do programa, nas partes que eu comentei o código..
alguém poderia me explicar o porquê dessas coisas?
desde já, agradeço..
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 09:35:56
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
Sempre atente ao tipo real do objeto e não da referência.
Apesar de ser uma referência do tipo Pai, o objeto na realidade é do tipo Filho (pai = filho). Sendo assim, a versão que será chamada do método é de Filho e não de Pai.
Na segunda linha, como o método n não foi sobrescrito por filho, ele vai usar a versão herdada de pai (novamente por causa do pai = filho).
Na última, vc fez antes um cast de filho para pai (p = (Pai) filho ... Esse cast é implícito, pois vc pode atribuir um objeto de uma subclasse a uma referência de superclasse. Os métodos vinculados serão da mesma forma.
Estude sobre polimorfismo e vinculação tardia para mais detalhes.
Até mais!
This message was edited 1 time. Last update was at 15/02/2008 09:36:58
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 10:19:32
|
Mantu
GUJ Ranger
![[Avatar]](/images/avatar/35285aa740b37f0b1933da97bf4ca4b9.jpg)
Membro desde: 27/03/2006 09:05:16
Mensagens: 961
Localização: São Paulo/SP
Offline
|
http://www.guj.com.br/posts/list/49267.java
|
[]'s
Mantu
"Vou lançar o 'Caguei'. Caguei para o 'Cansei'". Luciano Camargo
"O povo votou contra a opinião pública". Um certo jornalão da mídia golpista, a respeito da vitória de um certo cadidato a presidente do Brasil.
 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 10:43:09
|
dlt
JavaEvangelist
![[Avatar]](/images/avatar/f8decd07ac3bcdb30bc816319f3287de.png)
Membro desde: 20/12/2007 16:30:29
Mensagens: 367
Localização: Belo Horizonte
Offline
|
caramba
tá mais do que explicado, davidbuzatto e mantu, suas respostas vão me dar coisa pra estudar por umas boas horas..
pode considerar o tópico encerrado
edit:
faltou só agradecer: MUITO OBRIGADO
This message was edited 1 time. Last update was at 15/02/2008 10:44:49
|
"It goes against the grain of modern education to teach children to program. What fun is there in making plans, acquiring discipline in organizing thoughts, devoting attention to detail and learning to be self-critical?" - Alan Perlis |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 12:21:55
|
davidbuzatto
Moderador
![[Avatar]](/images/avatar/7ba6d33c373fea56b7258003b16c68e5.jpg)
Membro desde: 07/08/2004 23:47:57
Mensagens: 4013
Localização: Vargem Grande do Sul - SP
Offline
|
|
Seja educado. Agradeça quem te ajudou. Não custa nada.
Dúvidas de Java? Utilize o fórum! Não respondo via MP.
"Any fool can write code that a computer can understand. Good programmers write code that humans can understand." (Fowler)
"A vida é um escândalo, e no final dá sempre errado. O que humaniza o homem é o fracasso."
http://davidbuzatto.com.br | GitHub | uHunt | CV Lattes | Last.fm |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 15/02/2008 12:27:03
|
thingol
Moderador
Membro desde: 29/07/2004 16:10:13
Mensagens: 17543
Offline
|
Só complementando.
Em Java o comportamento padrão é diferente do comportamento padrão no C# e no C++.
Em C# e C++ você precisa usar a palavra-chave "virtual", para que o método chamado dependa do tipo do objeto e não da variável. Se você não usar "virtual", o método chamado depende do tipo da variável, não do objeto.
O padrão do Java é sempre usar o comportamento "virtual" para tudo que não é "static". E é por isso que nem existe essa palavra-chave em Java, embora o Java tenha sido inspirado no C++.
Portanto, quem aprende Java sabendo já C# ou C++ acaba se complicando (um pouquinho) porque as coisas são um pouco diferentes.
|
|
|
 |
|
|