定義一個Person類:
import java.sql.Date;
public class Person implements Cloneable{
public String name;
public int age;
public Date date;
public Person(){}
public Person(String name,int age,Date date){
this.name = name;
this.age = age;
this.date = date;
}
@Override
public String toString(){
return "name:" + name + " age:" + age + " date:" + date;
}
protected Person clone() throws CloneNotSupportedException{
/*
* 1.淺度克隆
*/
//return (Person)super.clone();
/*
* 2.對clone方法進行重寫,以實現深度克隆
*/
Person person = (Person)super.clone();
person.date = (Date)date.clone();
return person;
}
}
再定義一個Clone的測試類:
import java.sql.Date;
public class CloneTest {
public static void main(String[] args) throws CloneNotSupportedException {
Person person = new Person("David",23,Date.valueOf("2012-12-25"));
System.out.println("person對象 --> " + person);
System.out.println("-------------對person進行克隆----------------");
Person newPerson = person.clone();
System.out.println("newPerson對象 --> " + newPerson);
System.out.println("-------------判斷對象------------------");
System.out.println("person和newPerson:" + (person == newPerson));
System.out.println("------------對屬性進行修改----------------");
/*
* 修改姓名和年齡,只有newPerson改變
*/
newPerson.name = "lily";
newPerson.age = 33;
/*
* 修改日期,
* 開始:Perosn和newPerson都改變了,說明這是淺度克隆
* 要想做深度克隆,需要對clone方法進行重寫
*/
newPerson.date.setYear(2050);
/*
* 用這種方式修改,只有newPerson改變
*/
// newPerson.date = Date.valueOf("2050-5-5");
System.out.println("person對象 --> " + person);
System.out.println("newPerson對象 --> " + newPerson);
System.out.println("-------------判斷對象屬性------------------");
System.out.println("person和newPerson的name:" + (person.name == newPerson.name));
System.out.println("person和newPerson的age:" + (person.age == newPerson.age));
System.out.println("person和newPerson的date:" + (person.date == newPerson.date));
}
}