Problemas com instanceof [RESOLVIDO]

8 respostas
W

Boa tarde pessoal,
estou com um probleminha que não achei solução e gostaria que se alguém souber resolver me ajude por favor…
é o seguinte, tenho uma classe Administrador que herda de Empregado que por sua vez herda de Pessoa, então
criei um array do tipo Pessoa que a cada posição recebe uma instância de classe filha por exemplo

Pessoa[] pessoa;
 for(int  = 0;pessoa.length;i++)
     if(pessoa[i] == null)
           pessoa[i] = new Administrador();

Até aí funciona perfeitamente…o problema é a hora de mostrar os resultados…por exemplo, quero escrever somente
os dados de Administrador, então faço o seguinte:

for(int  = 0;pessoa.length;i++)
     if(pessoa[i] instanceof Administrador)
           System.out.print(((Admnistrador)pessoa[i]));

Mas quando faço isso, se caso pessoa[0] for uma instancia de Empregado e pessoa[1] for instancia de Administrador o sistema escreve duas vezes os dados, sendo que logicamente se pessoa é instância de Administrador que herda de Empregado, logo pessoa é uma instância de Empregado também, estou certo?
Se estou certo então como faço pra poder escrever somente os dados do Administrador?
Existe solução?

8 Respostas

leonardobhbr

Amigo tem como voce posta so os cabecalhos das classes?

W

Bom leonardobhbr, está assim minhas classes no cabeçalho

public class Empregado extends Pessoa

{

	private int numSecao;

	private double salarioBase;

	private double iRS;
....
public class Pessoa

{

	protected String nome;

	protected int numContribuinte;

	protected int idade;
...
public class Administrador extends Empregado

{

        private double ajudasDeCusto;
...

Não sei se era isso que você precisava.

leonardobhbr

Obrigado pelo codigo é isso mesmo

seguinte fiz o seguiinte teste e funcionou como o previsto

Pessoa[] pessoa = new Pessoa[3];
		pessoa[0] = new Pessoa();
		pessoa[1] = new Empregado();
		pessoa[2] = new Administrador();
		for(int i = 0; i < pessoa.length; i++)
		{
			if(pessoa[i] instanceof Administrador)
			{
				System.out.println("Administrador " + i);
			}
		}

console: Administrador 2

Não entendi qual o resultado que voce queria

otaviojava

Pessoa é uma instância de administrador já que ele é uma subclasse.
O que você pode fazer é ao ele passar verificar quem é o pai.

W

leonardobhbr:
Obrigado pelo codigo é isso mesmo

seguinte fiz o seguiinte teste e funcionou como o previsto

Pessoa[] pessoa = new Pessoa[3];
		pessoa[0] = new Pessoa();
		pessoa[1] = new Empregado();
		pessoa[2] = new Administrador();
		for(int i = 0; i < pessoa.length; i++)
		{
			if(pessoa[i] instanceof Administrador)
			{
				System.out.println("Administrador " + i);
			}
		}

console: Administrador 2

Não entendi qual o resultado que voce queria

Obrigado, mas não era bem isso…o meu objeto é do tipo Pessoa, eu escrevo ele da seguinte forma
e estou fazendo tipo um cast para escrever os dados de Pessoa > Empregado > Administrador, nessa
sequencia de herança…assim:

for(int i = 0;i < pessoa.length;i++)
      if(pessoa[i] instanceof Administrador)
             System.out.print(((Administrador)pessoa[i]));

entendeu? O problema e que se você dizer que pessoa é instância de Administrador ele vai escrever obrigatoriamente a
instância de Empregado, e não era isso que eu queria.

W

otaviojava:
Pessoa é uma instância de administrador já que ele é uma subclasse.
O que você pode fazer é ao ele passar verificar quem é o pai.

E como faço isso???

otaviojava
object.getClass().getSuperclass();
W

Bom galera, valeu a ajuda, mas consegui resolver de outra forma…
ficou um pouco estranho mas funcionou do jeito que eu queria…

for(int i = 0;i < pessoa.length;i++)

		     if(pessoa[i] instanceof Empregado && pessoa[i] instanceof Administrador == false && pessoa[i] instanceof Operario == false)

		             System.out.print("\n\n\nDados do Empregado: \n\n" + ((Empregado)pessoa[i]) + "\n-------------------------------");

Tá aí caso ajude alguem algum dia…

Criado 25 de novembro de 2011
Ultima resposta 25 de nov. de 2011
Respostas 8
Participantes 3