Agora imagine se além desses métodos eu tenha também um método que o parâmetro é um Objeto.
publicmetodo(Pessoas){}
Até aqui tudo bem também.
Só que esse objeto é generico. Por exemplo uma classe Pessoa, onde existem subclasses dela.
Logo, quando eu for chamar o método vou passar a subclasse no parâmetro.
Por exemplo:
metodo(empregado)// objeto que tem como superclasse Pessoa.metodo(gerente)// objeto que tem como superclasse Pessoa.metodo(diretor)// objeto que tem como superclasse Pessoa.
Enfim a pergunta. O meu metodo “” metodo (Pessoa pessoa) {} “” tem como saber de que instância é “pessoa”.
Você quer saber dentro do seu método “metodo (Pessoa s)” se o objeto passado é Empregado, Gerente ou Diretor ?
Se for isso, porque não usa o instanceOf dentro desse método.
[]s
davidbuzatto
Tem sim.
publicclassPessoa{}publicclassPessoaFisicaextendsPessoa{}publicclassTeste{publicstaticvoidmain(String[]args){Testet=newTeste();Pessoap=newPessoa();PessoaFisicapf=newPessoaFisica();t.umMetodo(p);t.umMetodo(pf);}publicvoidumMetodo(Pessoap){if(pinstanceofPessoa){System.out.println("Objeto do tipo Pessoa.");}elseif(pinstanceofPessoaFisica)){System.out.println("Objeto do tipo PessoaFisica.");}// ou se quiser dificultar :D (pode ser um caso dos códigos toscos :D )if(p.getClass().equals(Pessoa.class)){System.out.println("Objeto do tipo Pessoa.");}elseif(p.getClass().equals(PessoaFisica.class)){System.out.println("Objeto do tipo PessoaFisica.");}}}
[]'s
cafezin
davidbuzatto:
Tem sim.
publicclassPessoa{}publicclassPessoaFisicaextendsPessoa{}publicclassTeste{publicstaticvoidmain(String[]args){Testet=newTeste();Pessoap=newPessoa();PessoaFisicapf=newPessoaFisica();t.umMetodo(p);t.umMetodo(pf);}publicvoidumMetodo(Pessoap){if(pinstanceofPessoa){System.out.println("Objeto do tipo Pessoa.");}elseif(pinstanceofPessoaFisica)){System.out.println("Objeto do tipo PessoaFisica.");}// ou se quiser dificultar :D (pode ser um caso dos códigos toscos :D )if(p.getClass().equals(Pessoa.class)){System.out.println("Objeto do tipo Pessoa.");}elseif(p.getClass().equals(PessoaFisica.class)){System.out.println("Objeto do tipo PessoaFisica.");}}}
[]'s
Aqui não tem problemas porque você já definiu o tipo antes
Pessoa p = new Pessoa();
PessoaFisica pf = new PessoaFisica();
O caso seria esse:
Pessoa p = new Pessoa();
Pessoa pf = new PessoaFisica();
Peço desculpas talvez eu não tenha deixado claro. Mas muito obrigado.
cafezin
Zeed01:
Boa tarde galera !
Você quer saber dentro do seu método “metodo (Pessoa s)” se o objeto passado é Empregado, Gerente ou Diretor ?
Se for isso, porque não usa o instanceOf dentro desse método.
[]s
Na verdade é isso mesmo, não estava achando o instanceOf aqui.
Obrigado e Boa tarde
cafezin
Ae pessoal,
Estou tentando mais algumas coisas, agradeço a quem colaborar.
E se o parametro ainda for uma lista...
publicvoidcreateObjects(List<Pessoal>pessoa){// nao da pra fazer por que é uma lista, teria de fazer o cast de cada umif(pessoainstanceofGerente){typegerente=(Gerente)pessoa;}}
Ae pessoal,
Estou tentando mais algumas coisas, agradeço a quem colaborar.
E se o parametro ainda for uma lista...
publicvoidcreateObjects(List<Pessoal>pessoa){// nao da pra fazer por que é uma lista, teria de fazer o cast de cada umif(pessoainstanceofGerente){typegerente=(Gerente)pessoa;}}
Nesse caso não tem jeito.. o instanceOf aponta para o objeto List, e nao para sua lista interna..
tem q por dentro do For e comparar 1 a 1...
Como vc esta usando herança…mesmo sua variavel de referencia seja do tipo pessoa, se dentro dela existir um objeto que foi instanciado de uma subclasse de pessoa, quando vc executar a chamada do metodo, sera executado o metodo da subclasse…somente se nao for encontrado um metodo correspondente ao chamado na subclasse, sera executado o metodo da superclasse…