实现克隆的步骤
- 让类实现Cloneable接口
- 重写clone方法为public,并调用super.clone()
代码示例
public class People implements Cloneable {
private int age;
private String name;
public People(int age, String name) {
super();
this.age = age;
this.name = name;
}
public People() {
super();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
调用
public class Test {
public static void main(String[] args) throws CloneNotSupportedException {
People people = new People(11, "zzh");
People copy = (People) people.clone();
System.out.println(copy.getAge());
}
}
这是一个浅克隆,如果对象中含有引用其他对象的属性,克隆后引用也将指向同一个对象,深克隆需要自己在clone()方法中实现,例如
public class People implements Cloneable {
private int age;
private String name;
private Phone phone;
public People(int age, String name) {
super();
this.age = age;
this.name = name;
}
public People() {
super();
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Phone getPhone() {
return phone;
}
public void setPhone(Phone phone) {
this.phone = phone;
}
@Override
public People clone() throws CloneNotSupportedException {
People p = null;
p = (People) super.clone();
p.phone = (Phone) phone.clone();
return p;
}
}
克隆的使用场景
- 比如一个对象的初始化复杂,你需要得到一份相似的对象,使用克隆,将会是一个不错的选择。
- 克隆在对数组的复制也是十分方便的,可以直接使用。