【常用類】Clone方法

定義一個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));		
		
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章