Object——Clonable接口(深浅拷贝)

前言:

Object提供了一个拷贝方法,用于重新创建出一个数据一样的对象或者数据的副本。拷贝的意义在于节省创建对象的成本,避免原对象的数据修改。

Clonable接口内部:

可以看到,Clonable接口就只有一副空壳,也就是空接口,空接口干什么的呢?也很好理解,空接口也叫标记接口,表示当前类是可以克隆的,克隆自然不需要什么成员,只需要等着拷贝过来的对象复制就行了

clone方法内部:

可以看到后面有一串字符,throws CloneNotSupportedException

翻译过来就是抛出了CloneNotSupportedException异常(后续关于异常也会出相关的博客)

所以我们调用的时候要在main方法后面加上这一串字符:

整体代码实现就是这样:

注意的点是

1.clone的返回类型

2.throws CloneNotSupportedException异常

3.实现Clonable接口后才能调用

拷贝概念

如上面创建的Sheep对象s和克隆对象c来演示:

浅拷贝

例如我们在Sheep类里面再创建一个对象,想让克隆出来的类内部对象的属性不同于原类内部对象的属性,则我们可以这样:

但是结果发现,虽然改的是克隆对象的数据,但是连着原对象的数据也给改了。原因是因为类的内部对象并没有克隆,改的都是原对象引用出来的数据,如图详解:

这个就是浅拷贝,只拷贝外面的对象,里面的对象则拷贝不到。

深拷贝

要想完成原类和克隆类的内部对象数据不一,我们得让类内部的对象也给克隆出来:
先让wool类实现clone方法:

然后修改一下Sheep类的clone方法,让它先克隆出一个wool类对象再返回:

注意是先实现Cloable接口后才能调用clone方法!!!

然后我们就得到结果,发现只修改了克隆对象的数据:

以上就是运用Object类的克隆方法的注意事项,能否给个赞来支持一下

                                   

  • 19
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值