Olá, tenho pouco conhecimento em java e gostaria de solucionar um problema.
Tenho as seguintes classes
class Pai {}
class Filha1 extends Pai {}
class Filha2 extends Pai {}
Criei uma lista de objetos do tipo Pai.
List<Pai> pai = ArrayList<Pai>();
Filha1 f1 = new Filha1();
pai.add(f1);
Filha2 f2 = new Filha2();
pai.add(f2);
Agora preciso interar sobre está lista e obter os objetos filhos e seus methodos, tentei fazer um metodo no objeto pai que faz um cast para objeto filho, mas logo descobri que isso não fuciona. Para não ficar duvida fiz da seguinte forma:
//class Pai
public Filha1 getFilha1() {
return (Filha1)this;
}
Fazer cast na hora de chamar o metodo funciona, mas não achei produtivo, alguém tem alguma idéia do que posso fazer?
Esse metodo getFilho não funciona, em tempo de execução ele lança uma execption do cast.
Não sei explicar tecnicamente o porque disso mas depois de algumas pesquisas descobri que isso não funciona, expliquei como fiz apenas para entederem o que estou tentando.
Se todos os métodos existentes nas classes filhas forem sobreescritos da classe pai, basta iterar normalmente.
Agora, se na classe filha você tiver um método que não exista na classe pai, não tem jeito, tem que fazer um cast.
Tente algo como:
for (Pai p : pai) {
if (p instanceof Filha1) {
((Filha1)p).metodoFilha1();
} else if (p instanceof Filha2) {
((Filha2)p).metodoFilha2();
}
}