dúvida - subtipagem e casts  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
dlt
JavaEvangelist
[Avatar]

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
davidbuzatto
Moderador
[Avatar]

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
[WWW]
Mantu
GUJ Ranger
[Avatar]

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.

[Email] [MSN] [ICQ]
dlt
JavaEvangelist
[Avatar]

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
davidbuzatto
Moderador
[Avatar]

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
[WWW]
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.
[WWW]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team