1. Um eine Objektkopie zu implementieren, muss eine klonbare Schnittstelle implementiert werden. Wenn diese Schnittstelle nicht implementiert ist, wird eine CloneNotSupportedException generiert. Tatsächlich verfügt diese Schnittstelle nicht über eine einzige Methode, daher wird diese Art von Schnittstelle häufig als Markerschnittstelle bezeichnet.
2. Es gibt eine clone()-Methode in Object, die eine flache Kopie implementiert. Bei Mitgliedsvariablen grundlegender Datentypen wird der Wert durch flaches Kopieren direkt übertragen, dh der Attributwert wird in das neue Objekt kopiert, sodass grundlegende Datentypen direkt flach kopiert werden können.
Für variable Datentypen wie Date-Objekte müssen tiefe Kopien implementiert werden. Natürlich implementiert die Date-Klasse selbst die clone()-Methode, aber die String-Klasse implementiert beispielsweise nicht die clone( )-Methode, da String-Objekte die Zeichenfolge in ihrem Lebenszyklus nicht ändern können, um die Zeichenfolge im Speicher zu ändern. Es gibt kein Problem, wenn ähnliche Attribute in verschiedenen Objekten auf denselben String verweisen.
Java-Lernvideo-Tutorial: Java-Lernvideo
Das Beispiel sieht wie folgt aus:
public class Main{ public static void main(String[] args){ } } class Employee implements Cloneable{ private int id; private Date date; public Employee(){} public Employee(int id){ this.id=id; this.date=new Date(); } @Override public Employee clone() throws CloneNotSupportedException{ Object t=super.clone();//此时的object中的拷贝只是浅拷贝 Employee clone=(Employee)t; clone.date=this.data.clone();//date类实现了深拷贝,直接调用即可 return clone; } } class Mannager extends Employee{ private String name; public Mannager(){ super(); } public Mannager(String name,int id){ super(id); this.name=name; } @Override public Mannager clone(){ Employee t=super.clone();//先把id date属性复制 Mannager clone=(Mannager)t; clone.name=t.name;//String 对象直接赋值引用 return clone; } }
Empfohlene weitere Java-bezogene Artikel: Java-Einführung Tutorial
Das obige ist der detaillierte Inhalt vonTiefe Kopie und flache Kopie der Java-Objektkopie. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!