Die überschriebene public Variante von .clone() sollte als erstes super.clone() aufrufen und dann alle Member des Klon-Objektes, welche Variablen (ohne final Schlüsselwort) auf nicht-konstante Daten (mutable) besitzt, mit Kopien solcher Daten besetzen. Denn die Konvention von .clone() sieht eine komplette Unabhängigkeit von Objekten zu ihren Klonen vor. Die Implementierung von .clone() in Object vollzieht eine nicht-rekursive Zuweisung aller Membervariablen vom Original an die entsprechenden Membervariablen vom Klon. Es findet keine Überprüfung auf Referenzwerte als Daten statt. Daher muß sich die Cloneable implementierende Klasse um diese Details kümmern.
Die Intention des Klon-Vorgangs aus Object.clone() ist es folgende Eigenschaften zu haben:
- x.clone() != x
- x.clone().getClass() == x.getClass()
- x.clone().equals(x)
Links:
Keine Kommentare:
Kommentar veröffentlichen