Hi,
Also ich verstehe leider nicht den genauen Unterschied zwischen
Shallow und Deep Clone.
Ich dachte, indem man Cloneable implementiert und in der Klasse, von welcher
eine Kopie gemacht wird, die Methode clone() überschreibt, kann man nun
Kopien erstellen. Aber nur solch Kopien, welche selbst keine Objekte in sich haben..., ja?
Warum kommt hier nun als 2. Ausgabe genau das gleiche heraus wie in der ersten Ausgabe?
Beweist das nicht schon, dass eine Instanz von DeepClone auch ein Objekt Student hat?
Oder ist das ganze immernoch Shallow Clone und warum?!
Also ich verstehe leider nicht den genauen Unterschied zwischen
Shallow und Deep Clone.
Ich dachte, indem man Cloneable implementiert und in der Klasse, von welcher
eine Kopie gemacht wird, die Methode clone() überschreibt, kann man nun
Kopien erstellen. Aber nur solch Kopien, welche selbst keine Objekte in sich haben..., ja?
Java:
public class DeepClone implements Cloneable {
private String id;
private Student student;
public DeepClone(String id) {
this.id = id;
student = new Student("Muster",12345);
}
@Override
public Object clone() {
Object o = null;
try {
o = super.clone();
} catch (CloneNotSupportedException ex) {
}
return o;
}
public Student gibStudent() {
return student;
}
//Test
public static void main(String[] args) {
//Shallow
DeepClone a = new DeepClone("1");
DeepClone b = (DeepClone)a.clone();
System.out.println(a.gibStudent()); //Ausgabe 12345;Muster
System.out.println(b.gibStudent()); //Ausgabe 12345;Muster
}
}
// In Klasse Student nichts besonderes ausser:
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
Warum kommt hier nun als 2. Ausgabe genau das gleiche heraus wie in der ersten Ausgabe?
Beweist das nicht schon, dass eine Instanz von DeepClone auch ein Objekt Student hat?
Oder ist das ganze immernoch Shallow Clone und warum?!