首先介紹變量拷貝,變量拷貝時,原始變量和拷貝的新變量引用同一個對象。
例如:
Java代碼 
- Employee e1 = new Employee();
- Employee e2 = e1; //----引用,沒有復制
Employee e1 = new Employee();
Employee e2 = e1;
如果要創建一個對象的新拷貝,其狀態和原對象一樣,但是以后各自狀態各自維護,就要使用到clone方法了,當然你也可以通過其他方法實現。
clone是Object類的一個protected方法,也就意味的你不能亂拷貝的,其次如果對象中的所有屬性都屬于數值或者基本類型,這樣拷貝沒有問題的,但是,如果對象中包含子對象的引用,那么拷貝的結果就是兩個對象引用同一個子對象。
1、淺拷貝
默認的拷貝都是淺拷貝,你可以通過下面的方法實現:
Java代碼 
- class Employee implements Cloneable
- {
- public Employee clone() throws CloneNotSupportedException
- {
- return super.clone();
- }
- }
class Employee implements Cloneable
{
public Employee clone() throws CloneNotSupportedException
{
return super.clone();
}
}
淺拷貝需要記住的是原對象的各屬性最好都是基本類型或者不可變的對象。
2、深拷貝
深拷貝是相對淺拷貝的,解決不能管理子對象的問題的。
實現方法如下:
Java代碼 
- class Employee implements Cloneable
- {
- public Object clone() throws CloneNotSupportedException
- {
- Employee cloned = (Employee)super.clone();
-
- //深拷貝子對象
- cloned.dep = (Department)dep.clone();
- return cloned.
- }
- }
class Employee implements Cloneable
{
public Object clone() throws CloneNotSupportedException
{
Employee cloned = (Employee)super.clone();
//深拷貝子對象
cloned.dep = (Department)dep.clone();
return cloned.
}
}