clone方法总结Java

Java中Object类当中有许多方法,如图所示:

clone方法就是其中一种,分为浅拷贝,深拷贝举一个例子:

浅拷贝:

在Person类当中右键鼠标然后,选中Generate:

然后重写clone方法

protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }

重写完还是不能使用,需要一下几个步骤:

1:implements Cloneable这个接口

(这个Cloneable接口是标记接口,意味着这个类可以进行克隆)

public class Person implements Cloneable

2:由于这个方法返回类型是Object类,所以这里需要强制类型转换才能使用

3:强制类型转换成Person后还需要

4:运行结果:

深拷贝:

1:浅拷贝的缺陷

public class Test {
    public static void main(String[] args)
            throws CloneNotSupportedException {
        Person person1=new Person("zhangsan",18);
        Person person2=(Person)person1.clone();
        person2.money.m=10;
        System.out.println("person1:"+person1.money.m);
        System.out.println("person2:"+person2.money.m);
    }
}

当我们写出这样的代码,改变person2.money.m的值会影响person.money.m的值,这里我们不难发现,person2.money和person.money存的地址是相同的,所以会互相影响。

2:解决方法

a:在Money类中也重写clone方法
public class Money implements Cloneable{
    public int m;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
b:修改Person类中的clone方法
public class Person implements Cloneable{
    public String name;public int age;
    public Money money=new Money();
    public Person(String name,int age){
        this.age=age;
        this.name=name;
    }
    @Override
    protected Object clone()
            throws CloneNotSupportedException {
       Person tmp=(Person)super.clone();
       tmp.money= (Money)tmp.money.clone();
       return tmp;
    }
}

这里要特别注意类型转化!!!

3:运行结果

加油!!!!!!!!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小夏同学~~~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值