Boleh Diklon ialah antara muka yang ditandakan (antara muka kosong). Kaedah Object.clone() boleh digunakan. Jika objek kelas yang tidak melaksanakan Cloneable calls clone(), CloneNotSupportedException akan dilemparkan.
Boleh difahami bahawa antara muka Boleh Diklon memainkan fungsi penandaan memerlukan pengguna menandai kelas mana yang boleh diklonkan menambah antara muka Boleh Diklon, ini menunjukkan bahawa objek yang dicipta oleh kelas ini boleh diklon.
Jika anda mahu kelas mempunyai fungsi menyalin kejadian, selain melaksanakan antara muka Boleh Diklon, anda juga mesti mengatasi kaedah klon() kelas Objek.
Anda boleh melihat bahawa kaedah klon() kelas Objek diubah suai dengan dilindungi, jadi anda perlu memanggil kelas Objek melalui kata kunci super dalam klon yang diganti ( ) kaedah Kaedah klon() dalam
2 Pengenalan dan contoh salinan cetek
Salinan cetek hanya menyalin objek yang disalin, bukan objek yang dirujuk. Perhatikan kod berikut, gunakan contoh kelas Wang sebagai medan kelas Orang, buat objek baharu kelas Orang, orang1, dan salin objek orang1 kepada orang2 ini adalah salinan cetek, hanya salin rujukan wang objek orang1 kepada orang2, dan momey secara peribadi1 dan orang2 menunjuk ke objek yang sama.
class Money { public double m = 666; } class Person implements Cloneable{ int id; public Money money = new Money(); public Person(int id) { this.id = id; } @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } @Override public String toString() { return "Person{" + "id=" + id + ", money=" + money.m + '}'; } } public class TestDemo3 { public static void main(String[] args) throws CloneNotSupportedException { Person person1 = new Person(1); Person person2 = (Person) person1.clone(); System.out.println("通过person2修改前的结果"); System.out.println(person1); System.out.println(person2); person2.money.m = 888; person2.id = 2; System.out.println("通过person2修改后的结果"); System.out.println(person1); System.out.println(person2); } }
Ilustrasi salinan cetek:
3. Pengenalan kepada salinan dalam Dan contoh
Apabila menyalin objek, selain menyalin pembolehubah ahli jenis data asas, apabila menyalin pembolehubah ahli jenis rujukan, objek baharu dicipta untuk menyimpan pembolehubah ahli jenis rujukan . Ringkasnya:Kod berikut melaksanakan salinan dalam; untuk melaksanakan salinan mendalam objek person1, mula-mula gunakan rujukan Person tmp untuk menyimpan hasil salinan cetek, cari objek wang melalui rujukan tmp, dan kemudian salin wang itu object , kemudian berikannya kepada wang dalam tmp, dan akhirnya kembalikan tmp. Dengan cara ini, objek yang dirujuk oleh wang juga disalin, menyedari salinan yang mendalam Pada masa ini, momey secara peribadi1 dan orang2 menunjuk kepada dua objek berbeza.
class Money implements Cloneable{ public double m = 666; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } class Person implements Cloneable{ public int id; public Money money = new Money(); public Person(int id) { this.id = id; } @Override protected Object clone() throws CloneNotSupportedException { //return super.clone(); Person tmp = (Person) super.clone(); tmp.money = (Money) this.money.clone(); return tmp; } @Override public String toString() { return "Person{" + "id=" + id + ", money=" + money.m + '}'; } } public class Test2 { public static void main(String[] args) throws CloneNotSupportedException{ Person person1 = new Person(1); Person person2 = (Person) person1.clone(); System.out.println("通过person2修改前的结果"); System.out.println(person1); System.out.println(person2); person2.money.m = 888; person2.id = 2; System.out.println("通过person2修改后的结果"); System.out.println(person1); System.out.println(person2); } }
Ilustrasi salinan dalam:
4
Kaedah klon dalam Java ialah salinan cetek, dan jenis rujukan masih melepasi rujukan. Kita boleh melaksanakan salinan dalam dengan terus memanggil kaedah klon() dan melaksanakan kaedah klon() sekali lagi pada pembolehubah jenis rujukan objek.Atas ialah kandungan terperinci Cara menggunakan salinan dalam Java, salinan cetek dan antara muka Boleh Diklon. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!