Curso de Verão de Java



Resposta do 2º Quesito


Usaremos sobrecarga de métodos para implementar incluiAluno de DisciplinaPos e usaremos o fato de AlunoIC herdar de AlunoGrad, para implementar o incluiAluno de DisciplinaGrad.

class DisciplinaPos extends Disciplina {
  private Aluno alunos[];
	
  DisciplinaPos(String nome) {
	super(nome);
  }

  //este método só incluirá alunos da pós-graduação
  void incluiAluno(AlunoPos umAluno) {
	if (qtdAlunos < 30) {
           alunos[qtdAlunos] = umAluno;
           qtdAlunos = qtdAlunos + 1;
           return;
        }
  }

  //este método só incluirá alunos de IC
  void incluiAluno(AlunoIC umAluno) {
	if (qtdAlunos < 30) {
           alunos[qtdAlunos] = umAluno;
           qtdAlunos = qtdAlunos + 1;
           return;
        }
  }
  ..
}

class DisciplinaGrad extends Disciplina {
  private AlunoGrad alunos[];

  DisciplinaGrad(String nome) {
	super(nome);
  }

  //como AlunoIC é uma subclasse de AlunoGrad, 
  //o parâmetro umAluno também pode ter o tipo AlunoIC.
  void incluiAluno(AlunoGrad umAluno) {
	if (qtdAlunos < 30) {
           alunos[qtdAlunos] = umAluno;
           qtdAlunos = qtdAlunos + 1;
           return;
        }
  }
  ..
}

Também poderíamos utilizar um if-else para diferenciar os tipos de alunos, entretanto, a solução usando sobrecarga é bem mais elegante.



Jorge Henrique, jhcf@di.ufpe.br
Andreia Alcântara, aaa@di.ufpe.br
Última edição em 18 de janeiro de 1996.
URL: http://www.di.ufpe.br/~java/verao/aula4/resp2.html