Klonbare Schnittstelle:
Die Klasse, die diese Schnittstelle implementiert – daraus kann abgeleitet werden, dass die Methode clone() legal aufgerufen werden kann –, um Klasseninstanzen zu implementieren: Attribut-zu-Attribut kopieren. java.lang.Object
Unterklassen, die die Cloneable-Schnittstelle implementieren, sollten die clone()-Methode mit öffentlichem Zugriff überschreiben (obwohl die Clone-Methode in der Klasse java.Object vom geschützten Typ ist)
Es sollte beachtet werden, dass dies bei der Cloneable-Schnittstelle nicht der Fall ist Schließen Sie die Methode clone() ein. Wenn Sie also nur die Schnittstelle Cloneable implementieren, können Sie das Objekt nicht normal klonen[Grund: Selbst wenn die Methode clone reflektierend aufgerufen wird, gibt es keine Garantie dafür, dass sie erfolgreich ist]&ndash ;–Persönlich Das Verständnis ist:Es wird dadurch verursacht, ob die Clone()-Methode überschrieben werden soll oder das Problem von „flacher Kopie und tiefer Kopie“.
class Pet implements Cloneable{ //properties private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public Pet() { } public Pet(String name) { this.name = name; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Pet pet = (Pet) o; return Objects.equals(name, pet.name); } @Override public int hashCode() { return Objects.hash(name); } // @Override // public Pet clone() { // try { // return (Pet)super.clone(); // } catch (CloneNotSupportedException e) { // e.printStackTrace(); // } // return null; // } }
class Pet implements Cloneable{ //properties private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public Pet() { } public Pet(String name) { this.name = name; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Pet pet = (Pet) o; return Objects.equals(name, pet.name); } @Override public int hashCode() { return Objects.hash(name); } // @Override // public Pet clone() { // try { // return (Pet)super.clone(); // } catch (CloneNotSupportedException e) { // e.printStackTrace(); // } // return null; // } }
class Pet implements Cloneable{ //properties private String name; public void setName(String name) { this.name = name; } public String getName() { return name; } public Pet() { } public Pet(String name) { this.name = name; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + '}'; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Pet pet = (Pet) o; return Objects.equals(name, pet.name); } @Override public int hashCode() { return Objects.hash(name); } // @Override // public Pet clone() { // try { // return (Pet)super.clone(); // } catch (CloneNotSupportedException e) { // e.printStackTrace(); // } // return null; // } }
Die Codedemonstration lautet wie folgt:
//methods public static void main(String[] args) throws CloneNotSupportedException { testPerson(); } public static void testPerson() throws CloneNotSupportedException { Person p=new Person("张三",14,new Pet("小黑")); System.out.println(p); Person clone = (Person)p.clone(); System.out.println(clone); System.out.println(p.equals(clone)); System.out.println(p.getPet()==clone.getPet()); System.out.println("************"); clone.setAge(15); System.out.println(p); System.out.println(clone); System.out.println(p.equals(clone)); System.out.println("************"); clone.getPet().setName("小黄"); System.out.println(p); System.out.println(clone); System.out.println(p.equals(clone)); System.out.println(p.getPet()==clone.getPet()); }
Das obige ist der detaillierte Inhalt vonDeep-Copy- und Shallow-Copy-Methoden der Java Cloneable-Schnittstelle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!