ArrayList e Herança

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.

1 curtida

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.

1 curtida