Diferenciar Objetos - Polimorfismo

  • 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

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.

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

Abraço

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?

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

Isso ajuda?

[code]

if (SEU_OBJETO instanceof Grupo){

System.out.println(“Grupo…”);
}else if (SEU_OBJETO instanceof GrupoSimples){

System.out.println(“Gruposimples…”);
}[/code]

[quote=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

[/quote]

Talvez aqui, abaixa ai essa apostila

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

Olá,

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

abraços!