首先介紹變量拷貝,變量拷貝時(shí),原始變量和拷貝的新變量引用同一個(gè)對象。
例如:
Java代碼 
- Employee e1 = new Employee();
- Employee e2 = e1; //----引用,沒有復(fù)制
Employee e1 = new Employee();
Employee e2 = e1;
如果要創(chuàng)建一個(gè)對象的新拷貝,其狀態(tài)和原對象一樣,但是以后各自狀態(tài)各自維護(hù),就要使用到clone方法了,當(dāng)然你也可以通過其他方法實(shí)現(xiàn)。
clone是Object類的一個(gè)protected方法,也就意味的你不能亂拷貝的,其次如果對象中的所有屬性都屬于數(shù)值或者基本類型,這樣拷貝沒有問題的,但是,如果對象中包含子對象的引用,那么拷貝的結(jié)果就是兩個(gè)對象引用同一個(gè)子對象。
1、淺拷貝
默認(rèn)的拷貝都是淺拷貝,你可以通過下面的方法實(shí)現(xiàn):
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、深拷貝
深拷貝是相對淺拷貝的,解決不能管理子對象的問題的。
實(shí)現(xiàn)方法如下:
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.
}
}