java 浅层克隆和深层克隆(实现接口Cloneable)

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();
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值