Diferenciar Objetos - Polimorfismo

7 respostas
B
  • Tenho duas Classes : Grupo e GrupoSimples.
  • Group extends GrupoSimples.

se …
Grupo grupo = new Grupo();

GrupoSimples grupoSimples =  grupo;

Como eu faço para saber que “grupo é Grupo” e grupoSimples é “GrupoSimple”?? lembrando que Grupo extends GrupoSimples.

já tentei…
instanceof e getClass().equals(Classe.class)

mas eles sempre são reconhecidos como Grupo…

Abraço

7 Respostas

T

O tipo de uma VARIÁVEL não é a mesma coisa que o tipo de um OBJETO.

O objeto é do tipo “Grupo” porque você o criou com “new Grupo”. Portanto, “instanceof” vai lhe dizer que o objeto é do tipo Grupo.

O tipo da VARIÁVEL só pode ser obtido via reflection, isso se for um membro de uma classe. Se for um parâmetro ou uma variável local, não se pode obter o tipo da variável nem via reflection.

B

Sim sim, mas não haveria alguma forma de diferenciar?
estou pegando o objeto por parametro.

Abraço

T

Você não entendeu o que é polimorfismo ou herança.
O que importa em Java é o tipo do objeto, não da variável.
Se você recebe um objeto como parâmetro, o tipo desse objeto foi determinado na sua criação; ele não pode ser mudado só porque você fez um cast ou copiou sua referência para um parâmetro.

Portanto, no seu caso, o objeto que foi criado como "new Grupo" dará o seguinte resultado para instanceof:

instanceof Grupo --> true
instanceof GrupoSimples --> true também, já que Grupo extends GrupoSimples.

OK?

B

Sim , muito obrigado, essa parte eu entendi. :slight_smile:

Mas na verdade eu estou trabalhando com um ITreeContentProvider.

Logo, estou montando uma árvore.

Meu “Grupo” aparece em diferente níveis da arvore, e em cada nível meu Provider deve fornecer um comportamento diferente.

Basicamente, esse grupo tem uma lista de Pessoas. Acontece que Meu Provider sempre apresenta o Grupo, na arvore, expandindo sua lista de pessoas.

Agora sim, chegamos ao ponto. Em um determinado nível da arvore eu não quero que ele expanda a lista de Pessoas.

Deve apresentar apenas um nodo, com o nome do Grupo (sem filhos).

No meu modelo de dados eu criei “GropuSimples” que não tem a lista de pessoas.

Foi uma tentativa, não deu certo… (ele continua expandindo em tudos os níveis)

Terias alguma idéia de como eu posso fazer isso?

Obrigado

mduques

Isso ajuda?

if (SEU_OBJETO instanceof Grupo){

System.out.println("Grupo...");
}else if (SEU_OBJETO instanceof GrupoSimples){

System.out.println("Gruposimples...");
}
Marcio_Duran

Bartolomeu Simpson:
Sim , muito obrigado, essa parte eu entendi. :slight_smile:

Mas na verdade eu estou trabalhando com um ITreeContentProvider.

Logo, estou montando uma árvore.

Meu “Grupo” aparece em diferente níveis da arvore, e em cada nível meu Provider deve fornecer um comportamento diferente.

Basicamente, esse grupo tem uma lista de Pessoas. Acontece que Meu Provider sempre apresenta o Grupo, na arvore, expandindo sua lista de pessoas.

Agora sim, chegamos ao ponto. Em um determinado nível da arvore eu não quero que ele expanda a lista de Pessoas.

Deve apresentar apenas um nodo, com o nome do Grupo (sem filhos).

No meu modelo de dados eu criei “GropuSimples” que não tem a lista de pessoas.

Foi uma tentativa, não deu certo… (ele continua expandindo em tudos os níveis)

Terias alguma idéia de como eu posso fazer isso?

Obrigado

Talvez aqui, abaixa ai essa apostila

:arrow: http://www.caelum.com.br/downloads/apostila/caelum-algoritmos-estruturas-dados-java-cs14.pdf

mynameisflaw

Olá,

você pode criar atributos dentro das suas classes com valores que as diferencie.

abraços!

Criado 10 de dezembro de 2008
Ultima resposta 10 de dez. de 2008
Respostas 7
Participantes 5