Fala Alan! Eu adicionei algumas saídas pra gente tentar entender o que seu código está fazendo. Roda este código abaixo e veja posta o resultado aqui, por favor.
@Override
public boolean equals(Object obj) {
if (this == obj) {
System.out.print("MESMO OBJETO - ");
return true;
}
if (obj == null) {
System.out.print("OUTRO OBJETO É NULO - ");
return false;
}
if (getClass() != obj.getClass()) {
System.out.print("CLASSES DIFERENTES - ");
return false;
}
Aluno other = (Aluno) obj;
if (matricula == other.matricula || nome == other.nome) {
System.out.print("NOME OU MATRICULA IGUAIS - ");
return true;
}
if (nome == null) {
if (other.nome != null) {
System.out.print("NOME ALUNO NULO E O OUTRO NÃO - ");
return false;
}
} else if (!nome.equals(other.nome)) {
System.out.print("NOMES DIFERENTES (MATRICULA TB) - ");
return false;
}
System.out.print("RETURN FINAL - ");
return true;
}
Alterei um pouco o TestaAluno. Da parte que cria o curso até o fim do método, coloque o código abaixo:
Curso curso = new Curso("Curso Teste", "Instrutor Teste");
curso.matricula(aluno);
System.out.println(aluno.equals(curso));
System.out.println("Mesmo objeto : " + curso.estaMatriculado(aluno));
System.out.println("Outro objeto é nulo : " + curso.equals(null));
System.out.println("Mesmo nome, mesma matricula: " + curso.estaMatriculado(mesmo));
System.out.println("Outro nome, outra matricula: " + curso.estaMatriculado(outro));
System.out.println("Mesmo nome, outra matricula: " + curso.estaMatriculado(msmNome));
System.out.println("Outro nome, mesma matricula: " + curso.estaMatriculado(msmMatr));
System.out.println("Nome null, mesma matricula : " + curso.estaMatriculado(msmNulo));
System.out.println("Nome null, outra matricula : " + curso.estaMatriculado(outroNulo));
A saída foi:
CLASSES DIFERENTES - false
MESMO OBJETO - Mesmo objeto : true
Outro objeto é nulo : false
NOME OU MATRICULA IGUAIS - Mesmo nome, mesma matricula: true
NOMES DIFERENTES (MATRICULA TB) - Outro nome, outra matricula: false
NOME OU MATRICULA IGUAIS - Mesmo nome, outra matricula: true
NOME OU MATRICULA IGUAIS - Outro nome, mesma matricula: true
NOME OU MATRICULA IGUAIS - Nome null, mesma matricula : true
NOME ALUNO NULO E O OUTRO NÃO - Nome null, outra matricula : false
Seu código está bom, mas tem algumas coisas que poderiam ser melhoradas:
- Vc não precisa testar se o segundo aluno é um objeto nulo, pq o equals já retorna false sem nem invocar o método sobrescrito. (Veja como o resultado do método acima não chegou a imprimir a parte do "O OUTRO OBJETO É NULO")
- Depois que vc testar se matricula ou nome são iguais, pode dar um return false, pq não vai existir mais casos de igualdade.