Copiar objeto Java em instâncias diferentes

Olá pessoal;
Gostaria de saber como faço para clonar um objeto java?
Já implementei a interface clonable mas nao adiantou…
Segue código:

public class Alle implements Cloneable{
	private String binId;
	private Turma turma;
	private Professor professor;
	private Disciplina disciplina;

	protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

}

Se fizer:

Alelos p = alle.clone();

E apos alterar p, alle será alterado também…

Alguem sabe como posso resolver este problema?

Desde já agradeço

O super.clone() não faz clone automático dos objetos, só de tipos primitivos.
Para objetos, ele clona apenas as referências.

Isso você tem que fazer na mão.

[code]public class Alle implements Cloneable {
private String binId;
private Turma turma;
private Professor professor;
private Disciplina disciplina;

@Override
public Alle clone() {
Alle clone = (Alle) super.clone(); //Clona os tipos primitivos (no caso, binId)

  //Clona o resto.
  clone.turma = turma.clone(); 
  clone.professor = professor.clone();
  clone.disciplina = disciplina.clone();
  return clone;        

}
}
[/code]

Claro, todo mundo deve ser clonável e implementar a mesma lógica.

Outra coisa. note como implementei o método clone:

  1. Seu método clone, como está implementado, não deve lançar CloneNotSupportedException;
  2. Seu método clone deve retornar o tipo da sua própria classe;
  3. Seu método clone deve ser publico.

Isso deixa o código muito menos pentelho de usar, como fiz na clonagem de turma e professor. Se não for implementado assim, além de ter que dar try…catch naquele trecho, você ainda terá que fazer cast.

Funcionou!!!
Muito obrigado pela ajuda!!!