Salve a tutti,
oggi a lezione stavamo vedendo la clonazione di oggetti in java.
Mi pare di aver capito che alcuni oggetti già hanno la loro implementazione del metodo clone oppure riescono ad utilizzare semplicemente quella generale di object (questo mi sfugge).

Ad ogni modo in un esempio di creazione di una propria implementazione di clone, quindi implementando clonable, tale metodo grossomodo (a parte un try-catch per la gestione degli errori) sostanzialmente eseguiva questo codice:

codice:
class Myobject implements Cloneable{
public Object clone(){
Object o = null;
o = super.clone();
return o;
}
}
Ora non capisco grossomodo cosa fa quel super.clone(). Cioè chiama il comando clone sulla superclasse e poi con il return lo ritorna? Cioè in realtà non reimplementa nulla in questo caso, tutto quel codice serve solo per rendere il clone di object da privato a pubblico o sbaglio?!

Stavo guardando anche questo sito per un pò di esempi:
http://www.cosenonjaviste.it/linterf...ava-cloneable/

Non riesco però comuqnue a darmi conferma dell'interrogativo di sopra e mi nasce anche un dubbio sull'ultimo esempio che propone, ve lo riporto:

codice:
public Persona clone() {
	try {
		return (Persona) super.clone();
	} catch (CloneNotSupportedException e) {
		throw new RuntimeException(e);
	}
}

Persona p1 = new Persona("Mario", "Rossi", "Via Firenze 1", new GregorianCalendar(2000, 0, 1).getTime());
Persona p2 = p1.clone();
p1.getDataDiNascita().setTime(System.currentTimeMillis());
System.out.println(p1.getDataDiNascita().equals(p2.getDataDiNascita()));
Secondo loro il metodo clone in quell'esempio darebbe problemi, anche se non ho capito perchè, ed andrebbe reimplementato così:

codice:
public Persona clone() {
	try {
		Persona p = (Persona) super.clone();
		p.dataDiNascita = (Date) dataDiNascita.clone();
		return p;
	} catch (CloneNotSupportedException e) {
		throw new RuntimeException(e);
	}
}
Ricapitolando non riesco a capire questo loro esempio e perchè il metodo clone di sopra non andrebbe bene. Inoltre non riesco a capire se quel reimplementare Cloneable in quel modo chiamando semplicemente super.clone non sia semplicemente un modo per rendere pubblica l'implmentazione del metodo clone, o se in realtà aggiunge un qualcosa e se si cosa.

Vi ringrazio in anticipo per l'attenzione,
Neptune.