Java提供了一个protected修饰的clone()方法,该方法用于帮助其他对象实现自我克隆,就是得到一个当前对象的副本,而且二者之间完全隔离。
克隆步骤如下:
1.实现Cloneable接口,这是一个标志性的接口,实现该接口的对象可以实现自我克隆,接口里没有定义任何方法。
2.通过super.clone()实现clone()方法,调用Object实现的clone()方法来得到该对象的副本,并返回该副本。
以下程序示范自我克隆:
public class Address {
String detail;
public Address(String detail)
{
this.detail=detail;
}
}
//实现Cloneable接口
public class User implements Cloneable {
int age;
Address address;
public User(int age)
{
this.age=age;
address=new Address("以色列");
}
public User clone()throws CloneNotSupportedException
{
return (User)super.clone();//通过super.clone()实现clone()方法
}
}
public class CloneTest {
public static void main(String[] args) throws CloneNotSupportedException{
User u1=new User(29);
User u2=u1.clone();//克隆得到u1的副本
System.out.println(u1==u2);//false
System.out.println(u1.address==u2.address);//true
}
}
这只是一种浅克隆,只克隆对象的所有Field值,不会对引用类型的Field进行克隆。