Eu não entendi o que vc quiz dizer com essa linha:
Aluno x = new Aluno(String nome, String codigo, String telefone, String morada, String ano_nascimento, String curso);
Aquele String nome, String codigo, vc não devia estar passando parametros ali ao inves de estar declarando ?! isso da erro de compilação.
De qualquer forma, ve se vc entende esses codigos, no primeiro eu sobrescrevi equals e hashcode de Utente para considerar o codigo como sendo a coisa que identifica um Utente, ou seja, dois Utente com mesmo código são iguais, idependente do nome, etc, utilizei uma List para armazenar os alunos e verifico se eles ja estão incluidos usando o método contains de List. No segundo eu não sobrescrevi equals e hashcode e usei um Map para salvar armazenar os alunos, usando como key o codigo dele.
Código 1 com List
abstract class Utente {
private int codigo;
private String nome;
public Utente(int codigo, String nome) {
this.nome = nome;
this.codigo = codigo;
}
@Override
public int hashCode() {
final int PRIME = 31;
int result = 1;
result = PRIME * result + codigo;
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
final Utente other = (Utente) obj;
if (codigo != other.codigo)
return false;
return true;
}
}
class Aluno extends Utente {
private int curso;
public Aluno(int codigo, String nome, int curso) {
super(codigo, nome);
this.curso = curso;
}
}
public class Teste {
List<Aluno> alunos = new ArrayList<Aluno>();
boolean addAluno(Aluno aluno) {
if (aluno == null)
throw new IllegalArgumentException(
"Não é possível adicionar um aluno nulo");
if (alunos.contains(aluno))
// aluno ja adicionado
return false;
alunos.add(aluno);
return true;
}
public static void main(String[] args) {
Teste t = new Teste();
// crio dois alunos com codigo 1 e 2
Aluno o1 = new Aluno(1, "aluno 1", 1);
Aluno o2 = new Aluno(2, "aluno 2", 1);
// insiro eles na lista
System.out.println("Adicionei aluno com codigo 1: " + t.addAluno(o1));
System.out.println("Adicionei de novo aluno com codigo 1: "
+ t.addAluno(o1));
System.out.println("Adicionei aluno com codigo 2: " + t.addAluno(o2));
}
}
Usando Map
abstract class Utente {
private int codigo;
private String nome;
public Utente(int codigo, String nome) {
this.nome = nome;
this.codigo = codigo;
}
public int getCodigo() {
return codigo;
}
}
class Aluno extends Utente {
private int curso;
public Aluno(int codigo, String nome, int curso) {
super(codigo, nome);
this.curso = curso;
}
}
public class Teste {
Map<Integer, Aluno> alunos = new HashMap<Integer, Aluno>();
boolean addAluno(Aluno aluno) {
if (aluno == null)
throw new IllegalArgumentException(
"Não é possível adicionar um aluno nulo");
if (alunos.containsKey(aluno.getCodigo()))
// aluno ja adicionado
return false;
alunos.put(aluno.getCodigo(), aluno);
return true;
}
public static void main(String[] args) {
Teste t = new Teste();
// crio dois alunos com codigo 1 e 2
Aluno o1 = new Aluno(1, "aluno 1", 1);
Aluno o2 = new Aluno(2, "aluno 2", 1);
// insiro eles na lista
System.out.println("Adicionei aluno com codigo 1: " + t.addAluno(o1));
System.out.println("Adicionei de novo aluno com codigo 1: "
+ t.addAluno(o1));
System.out.println("Adicionei aluno com codigo 2: " + t.addAluno(o2));
}
}
Não existe o correto, usar Map ou List, implementar ou não equals, depende de sua analise… mas se o que vc queria era armazenar alunos não deixando armazenar dois com o mesmo código, ta ai duas formas de fazer…