所谓浅克隆即是只将相应成员变量进行拷贝,如果含有复杂类型的成员则不进行进一步的复制,而只是将其引用进行复制。
深克隆就是复制到底~~
要实现深克隆有两种方法:
[color=red]一种是将相应的类都实现克隆接口,在包含复杂类型成员的克隆方法中调用相应的成员的克隆方法[/color]。如
[color=red]第二种方法是通过将对象序列化与反序列化来实现复制[/color]
深克隆就是复制到底~~
要实现深克隆有两种方法:
[color=red]一种是将相应的类都实现克隆接口,在包含复杂类型成员的克隆方法中调用相应的成员的克隆方法[/color]。如
public class A implements Cloneable,Serializable
{
private static final long serialVersionUID = -2051342021933626021L;
B b;
public A(B b)
{
this.b=b;
}
public Object clone()
{
A obj=null;
try
{
obj=(A)super.clone();
obj.b=(B)b.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return obj;
}
}
public class B implements Cloneable,Serializable
{
private static final long serialVersionUID = -5189809844536624029L;
public Object clone()
{
B obj=null;
try
{
obj=(B)super.clone();
}
catch (CloneNotSupportedException e)
{
e.printStackTrace();
}
return obj;
}
}
[color=red]第二种方法是通过将对象序列化与反序列化来实现复制[/color]
A a1=new A1(new B());
ByteArrayOutputStream in=new ByteArrayOutputStream();
ObjectOutputStream inStream=new ObjectOutputStream(in);
inStream.writeObject(a1);
ByteArrayInputStream out=new ByteArrayInputStream(in.toByteArray());
ObjectInputStream outStream=new ObjectInputStream(out);
A a2=(A)outStream.readObject();