关于Java里的Clone函数

文章讨论了作者对浅拷贝和深拷贝的理解困惑,指出在Java中,即使重写了`clone`方法,如果没有正确处理访问修饰符(如`protected`),依然可能导致子类对象无法直接调用。作者推测这可能与子类对象的上下文和访问权限有关。
摘要由CSDN通过智能技术生成

可算搞明白了,但是对于浅拷贝和深拷贝还是没分清楚

好像我怎么写都出不来深拷贝,一直都是同一个字符串

首先

不重写clone函数也可以直接调用,因为大家都是Object的子类

注意:

有protected修饰,关于这里我写过一篇

http://t.csdnimg.cn/MnoQ8

我一直都是搞错了这个protected修饰所以一直报错

这是我在测试类里写的,MyClone是一个我自己新创建的类

写在测试类里报错的原因其实我也不是很有把握,首先不满足同个包,但我认为不管是MyClone类还是测试类都是Object的子类,为什么在测试类里调用就会报错

与此同时

在测试类里这样写根本不会报错,,

所以我就觉得是不是又是protected的原因,因为Test是Object的子类,所以是可以直接调用的

在MyClone类里这样写也是不报错的

所以现在就只能知道,在每个类里都可以直接调用对于自己实例对象的clone方法,其他对象是不行的除非重写。

但是我  重写+标记接口+抓报错  也是浅拷贝貌似

这两个结果都是true,证明地址都没变。(下面的clone就是重写过的)

反正纠结这么久也没什么用,还是有两个问题没解决

为什么不重写clone方法就不能在其他类里直接调用?

为什么严格按照重写方式进行后还是浅拷贝?

关于第一个问题我又有一点点思考,我觉得会不会是对于其他对象调用的时候,是直接按照父类去对待的,但是父类不在同个包下,此时的实例对象也不是测试类的对象,所以对于测试类来说它此时既不是子类也没有同个包,所以就会报错,就是相当于哪怕我创建的是MyClone的对象,但是在该对象内部压根没clone这个方法,但是父类有,但是此时不在同个包下,且此时的类是测试类,虽然它是子类,但是实例对象不是它,是MyClone类的,但是MyClone类没这个方法,所以看父类,是protected,不是子类在使用这个方法,所以报错。。

感觉还是有问题,但是还是别去纠结啦

二编:

懂了

你这是没理解访问修饰符导致的疑问。object里的clone方法是protected修饰的,protected修饰的方法,在子类里是可以直接访问的,但并不代表子类对象可以访问。注意:子类和子类对象是2个概念。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值