Polimorfismo  XML
Índice dos Fóruns » Java Básico
Autor Mensagem
ralphsilver
Java Ninja
[Avatar]

Membro desde: 09/03/2008 19:53:14
Mensagens: 269
Offline

Nossa! Depois da resposta do nosso amigo Mantu porque ainda não mudaram o título para resolvido?

No mundo há apenas 10 tipos de pessoas: os que sabem binário e os que não sabem
[MSN]
ManoJava
JavaEvangelist
[Avatar]

Membro desde: 23/04/2009 09:18:23
Mensagens: 480
Localização: Mococa-SP
Offline


Pra quem chegou (vivo) até aqui, minhas sinceras desculpas pelo post-pergaminho. Espero que tenha ajudado (E que eu não tenha dito nenhuma bobagem no percurso).
Divirtam-se!


Sinceramente seu post motiva ler até o final, pois não seria muito inteligente não terminar de ler a explicação. Parbéns

Att.

"Há Três coisas que nunca voltam atrás: A flecha lançada, a palavra pronunciada e a oportunidade perdida." - Provérbio Chinês

In Guj We Trust!

Bacharel em Ciência da Computação
MBA - Gestão de Projetos
[WWW]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

ralphsilver wrote:Nossa! Depois da resposta do nosso amigo Mantu porque ainda não mudaram o título para resolvido?


Pq em 2007 não havia ainda essa prática no fórum.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ECO2004
JavaEvangelist
[Avatar]

Membro desde: 06/11/2006 01:11:23
Mensagens: 307
Online

"Para resolução de métodos, olha-se o tipo da referência, e não do valor que ela contém..."

O que você quis dizer com isso?

Animal a = new Cachorro();

A variável "a" está referenciando "Cachorro", correto?

Outra coisa, tem como você ser mais claro a respeito de tempo de execução (runtime) a a parte "estática" comentada?

Vlw
[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

ECO2004 wrote:"Para resolução de métodos, olha-se o tipo da referência, e não do valor que ela contém..."

O que você quis dizer com isso?

Animal a = new Cachorro();

A variável "a" está referenciando "Cachorro", correto?

Outra coisa, tem como você ser mais claro a respeito de tempo de execução (runtime) a a parte "estática" comentada?

Vlw


Sim está referenciando um cachorro. Mas o tipo da variável de referência a é Animal, e não cachorro. Na hora de escolher que método chamar, é sobre esse tipo que ele vai olhar, até porque, ele não tem como garantir que lá dentro haverá sempre um cachorro. Veja bem, no caso onde a chamada e a inicialização da variável estão próximos, é fácil vermos que Animal contém um cachorro. Mas lembre-se que você pode ter uma criação assim:



E nesse caso seria muito trabalhoso (para não dizer impossível) determinar o tipo do animal.



@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ECO2004
JavaEvangelist
[Avatar]

Membro desde: 06/11/2006 01:11:23
Mensagens: 307
Online

Eu entendi...

É por isso que usamos obj instanceof Classe, para sabermos se tal objeto pertence à classe.

Me corrija se eu estiver errado, mas quando faço "Animal a = new Cachorro();", isso somente ocorre em tempo de execução, até porque o new aloca memória e somente é feito isso em tempo de execução. Na compilação, não há memória alocada e tudo que a linguagem sabe é que "a" é do tipo Animal.

Esse também é um dos motivos pela qual o downcasting necessita de:

Cachorro c = (Cachorro)a;

pois "c" não sabe quem está "embaixo" de "a."

No meu exemplo anterior, criticado por você por ser errado, a função chamada é a f(C1 c) por quê?????????

[Email] [MSN] [ICQ]
ECO2004
JavaEvangelist
[Avatar]

Membro desde: 06/11/2006 01:11:23
Mensagens: 307
Online

É por que f(c1) não sabe que ocorreu "C1 c1 = new C2();" ?

Para que chamasse f(C2 c) ao invés de f(C1 c), teria que fazer na "main" f((C2)c1), pois c1, na instrução "f(c1)" não tem como ler a instrução anterior e ver que houve referência à C2?
[Email] [MSN] [ICQ]
ViniGodoy
Moderador
[Avatar]

Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline

Isso mesmo.

@ViniGodoy - Lattes

Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!

Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).

Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295
[WWW]
ECO2004
JavaEvangelist
[Avatar]

Membro desde: 06/11/2006 01:11:23
Mensagens: 307
Online

Obrigado!
[Email] [MSN] [ICQ]
 
Índice dos Fóruns » Java Básico
Ir para:   
Powered by JForum 2.1.8 © JForum Team