package LyfPractice;
/**
* Created by fangjiejie on 2016/12/4.
*/
public class People implements Cloneable{//调用克隆方法就要实现Cloneable接口
int age;
String name;
Baby baby;
@Override
protected Object clone() throws CloneNotSupportedException {
People p=(People) super.clone();
p.baby=(Baby) this.baby.clone();
return p;
}
public People(int age, String name,Baby baby) {
this.age = age;
this.name = name;
this.baby=baby;
}
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 static void main(String[] args) {//浅层克隆实现
Baby bao=new Baby("男");
People person1=new People(18,"MIMI",bao);
People person2=null;
try{//因为重写clone时候,抛出了一个不支持克隆的异常,所以要处理异常
person2=(People)person1.clone();//因为调用的是,重写的 object类的clone方法,对其克隆时,要记得强转
}catch (Exception e){
e.printStackTrace();
}
System.out.println(person2.getName());
person1.baby.setSex("女");
System.out.println(person2.baby.getSex());//浅层克隆时,结果为女,Person2下的对象跟随着Person1下的对象设置的
// 改变而改变,People下的对象随着People的克隆传的是地址,而我们要的克
// 隆是内容的传递,所以我们还要对其进行深克隆,深克隆后,Person2下的对
// 象不会跟随着Person1下的对象设置的改变而改变,结果仍然为男
}
}
class Baby implements Cloneable{
String sex;
public Baby(String sex) {
this.sex = sex;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
java 浅层克隆和深层克隆(实现接口Cloneable)
最新推荐文章于 2021-10-06 22:07:59 发布