package com.test;//淺復制(淺克?。? 淺復制僅僅復制所考慮的對象,而不復制它所引用的對象。//深復制(深克?。荷顝椭瓢岩獜椭频膶ο笏玫膶ο蠖紡椭屏艘槐?。////Java中對象的克隆,為了獲取對象的一份拷貝,我們可以利用Object類(lèi)的clone()方法。必須要遵循下面三點(diǎn)//1.在派生類(lèi)中覆蓋基類(lèi)的clone()方法,并聲明為public【Object類(lèi)中的clone()方法為protected的】。//2.在派生類(lèi)的clone()方法中,調用super.clone()。//3.在派生類(lèi)中實(shí)現Cloneable接口。//Object類(lèi)里的clone方法是淺復制(淺克?。?/span>public class CloneTest {public static void main(String[] args) throws Exception{//teacher對象將被clone出來(lái)的Student對象共享.Teacher teacher = new Teacher();teacher.setAge(40);teacher.setName("Teacher zhang");Student student1 = new Student();student1.setAge(20);student1.setName("zhangsan");student1.setTeacher(teacher);//復制出來(lái)一個(gè)對象student2Student student2 = (Student)student1.clone();System.out.println(student2.getAge());System.out.println(student2.getName());System.out.println("~~~~~~~~~~~~~~~~~~~~~~");System.out.println(student1.getTeacher().getAge());System.out.println(student1.getTeacher().getName());//修改student2的引用對象student2.getTeacher().setAge(50);student2.getTeacher().setName("Teacher Li");System.out.println("~~~~~~~~~~~~~~~~~~~~~~");System.out.println(student1.getTeacher().getAge());System.out.println(student1.getTeacher().getName());}}class Teacher {public int age;public String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}}class Student implements Cloneable{public int age ;public String name;public Teacher teacher;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}輸出結果為:20zhangsan~~~~~~~~~~~~~~~~~~~~~~40Teacher zhang~~~~~~~~~~~~~~~~~~~~~~50Teacher Lipackage com.test1;//深clonepublic class DeepCloneTest {public static void main(String[] args) throws Exception{//teacher對象將不被clone出來(lái)的Student對象共享.Teacher teacher = new Teacher();teacher.setAge(40);teacher.setName("Teacher zhang");Student student1 = new Student();student1.setAge(20);student1.setName("zhangsan");student1.setTeacher(teacher);//復制出來(lái)一個(gè)對象student2Student student2 = (Student)student1.clone();System.out.println(student2.getAge());System.out.println(student2.getName());System.out.println("~~~~~~~~~~~~~~~~~~~~~~");System.out.println(student1.getTeacher().getAge());System.out.println(student1.getTeacher().getName());//修改student2的引用對象student2.getTeacher().setAge(50);student2.getTeacher().setName("Teacher Li");System.out.println("~~~~~~~~~~~~~~~~~~~~~~");System.out.println(student1.getTeacher().getAge());System.out.println(student1.getTeacher().getName());}}class Teacher implements Cloneable{public int age;public String name;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic Object clone() throws CloneNotSupportedException {return super.clone();}}class Student implements Cloneable{public int age ;public String name;public Teacher teacher;public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher = teacher;}@Overridepublic Object clone() throws CloneNotSupportedException {Student student = (Student)super.clone();//將引用的對象teacher也clone下student.setTeacher((Teacher)(student.getTeacher().clone()));return student;}}輸出結果為:20zhangsan~~~~~~~~~~~~~~~~~~~~~~40Teacher zhang~~~~~~~~~~~~~~~~~~~~~~40Teacher zhang聯(lián)系客服