Tenho uma classe chamada Pessoa. Dentro dela tenho as subclasses (heranças) Professor e Aluno. Criei uma ArrayList em Pessoa. Supondo que tenho o atributo ‘salario’ em Professor, eu gostaria de saber se é possível acessar esse atributo através da ArrayList. Resumindo, percorrer a ArrayList através da classe filha.
Claro. As classes filhas herdam os atributos e métodos das classes mãe.
Poste seu código e explique melhor o que quer acessar.
O código é um pouco grande por envolver um cadastro.
Mas basicamente é isso:
ArrayList arquivoPessoa;
arquivoPessoa = new ArrayList();
Pessoa p = new Pessoa();
Professor prof = new Professor();
Aluno aluno = new Aluno();
prof.setNome(“Fulano”);
aluno.setNome(“Ciclano”);
arquivoPessoa.add(prof);
arquivoPessoa.add(aluno);
Agora estou com dúvida sobre como posso por exemplo printar esses dados através da ArrayList.
Na verdade o nome não é o principal problema. Como o nome é um atributo em comum das subclasses, posso fazer usando p.get(0).getNome().
Mas no caso eu precisava usar no cadastro de disciplina.
prof.setDisciplina(“POO”);
Faça dessa forma:
//Cria a lista do tipo Pessoa, que aceita Professor ou Aluno:
List<Pessoa> arquivoPessoa;
arquivoPessoa = new ArrayList<Pessoa>();
Professor prof = new Professor();
Aluno aluno = new Aluno();
prof.setNome("Fulano");
aluno.setNome("Ciclano");
arquivoPessoa.add(prof);
arquivoPessoa.add(aluno);
//percorre cada pessoa da lista, sendo Professor ou Aluno e imprime os atributos desejados.
//substitua "getAtributo" pelo atributo desejado.
for (Pessoa pessoa : arquivoPessoa) {
System.out.println(pessoa.getAtributo1);
System.out.println(pessoa.getAtributo2);
System.out.println(pessoa.getAtributo3);
}
Mas como eu uso por exemplo o getDisciplina se ele está apenas no Professor? O netbeans não me dá como opção pessoa.getDisciplina(). Apenas o getNome().
Fiz esse código caso fosse recuperar apenas atributos herdados, como pediu acima.
Caso queira recuperar todos, precisa criar uma lista de Aluno e outra de Professor, uma vez que Aluno tem métodos getter e atributos diferentes de Professor:
// Cria as listas Professor e Aluno:
List<Professor> arquivoProfessor;
arquivoProfessor = new ArrayList<Professor>();
List<Aluno> arquivoAluno;
arquivoAluno = new ArrayList<Aluno>();
Professor prof = new Professor();
Aluno aluno = new Aluno();
prof.setNome("Fulano");
aluno.setNome("Ciclano");
arquivoProfessor.add(prof);
arquivoAluno.add(aluno);
// percorre cada item da lista e imprime os
// atributos desejados.
// substitua "getAtributo" pelo atributo desejado. Não esqueça de ver se há getters e setters
// nos atributos de Pessoa.
for (int i = 0; i < arquivoProfessor.size(); i++) {
System.out.println(arquivoPessoa.get(i).getAtributo1);
System.out.println(arquivoPessoa.get(i).getAtributo2);
System.out.println(arquivoPessoa.get(i).getAtributo3);
}
for (int i = 0; i < arquivoAluno.size(); i++) {
System.out.println(arquivoAluno.get(i).getAtributo1);
System.out.println(arquivoAluno.get(i).getAtributo2);
System.out.println(arquivoAluno.get(i).getAtributo3);
}
Ah sim, entendi. Muito obrigado. Estava com receio de fazer dessa forma porque achava que isso criaria ArrayList dentro de ArrayList e não faria sentido pra mim.