/**
* 測試對象
*
* @author Administrator
*
*/
public class Name implements Cloneable, Serializable{
private static final long serialVersionUID = L;
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Name clone() {
try {
return (Name)super.clone();
} catch (CloneNotSupportedException e) {
return null;
}
}
}
/**
* 深克隆
*
* @author Administrator
*
*/
public class ProductByDeepClone implements Cloneable, Serializable{
private static final long serialVersionUID = L;
private String id;
private Name name;
private String[] part;
public ProductByDeepClone(String id, Name name, String[] part) {
super();
this.id = id;
this.name = name;
this.part = part;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public Name getName() {
return name;
}
public void setName(Name name) {
this.name = name;
}
public String[] getPart() {
return part;
}
public void setPart(String[] part) {
this.part = part;
}
/**
* 深克隆
*/
public ProductByDeepClone clone() {
try {
ProductByDeepClone p = (ProductByDeepClone)super.clone();
p.name = this.name.clone();
p.part = this.part.clone();
return p;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
/**
* 深克隆測試
*
* @author Administrator
*
*/
public class ClientByDeepClone {
public static void main(String[] args) {
String id = "1";
Name name = new Name();
name.setName("name1");
String[] part = { "part1", "part2" };
ProductByDeepClone p1 = new ProductByDeepClone(id, name, part);
System.out.println("首次指派");
System.out.println(p1);
System.out.println(p1.getId());
System.out.println(p1.getName().getName());
System.out.println(p1.getPart()[]);
System.out.println();
// 克隆
System.out.println("克隆後的值");
ProductByDeepClone p2 = (ProductByDeepClone) p1.clone();
System.out.println(p2);
System.out.println(p2.getId());
System.out.println(p2.getName().getName());
System.out.println(p2.getPart()[]);
System.out.println();
id = "2";
name.setName("name2");
part[] = "part21";
// 給原對象重新指派後原先的對象的值
System.out.println("給原對象重新指派後原先的對象的值");
System.out.println(p1);
System.out.println(p1.getId());
System.out.println(p1.getName().getName());
System.out.println(p1.getPart()[]);
System.out.println();
System.out.println("給原對象重新指派後新的對象的值");
System.out.println(p2);
System.out.println(p2.getId());
System.out.println(p2.getName().getName());
System.out.println(p2.getPart()[]);
System.out.println();
}
}
測試結果:
首次指派
com.suntefan.model.prototype.ProductByDeepClone@7852e922
name1
part1
克隆後的值
com.suntefan.model.prototype.ProductByDeepClone@4e25154f
name1
part1
給原對象重新指派後原先的對象的值
com.suntefan.model.prototype.ProductByDeepClone@7852e922
name2
part21
給原對象重新指派後新的對象的值
com.suntefan.model.prototype.ProductByDeepClone@4e25154f
name1
part1