可算搞明白了,但是对于浅拷贝和深拷贝还是没分清楚
好像我怎么写都出不来深拷贝,一直都是同一个字符串
首先
不重写clone函数也可以直接调用,因为大家都是Object的子类
注意:
有protected修饰,关于这里我写过一篇
我一直都是搞错了这个protected修饰所以一直报错
这是我在测试类里写的,MyClone是一个我自己新创建的类
写在测试类里报错的原因其实我也不是很有把握,首先不满足同个包,但我认为不管是MyClone类还是测试类都是Object的子类,为什么在测试类里调用就会报错
与此同时
在测试类里这样写根本不会报错,,
所以我就觉得是不是又是protected的原因,因为Test是Object的子类,所以是可以直接调用的
在MyClone类里这样写也是不报错的
所以现在就只能知道,在每个类里都可以直接调用对于自己实例对象的clone方法,其他对象是不行的除非重写。
但是我 重写+标记接口+抓报错 也是浅拷贝貌似
这两个结果都是true,证明地址都没变。(下面的clone就是重写过的)
反正纠结这么久也没什么用,还是有两个问题没解决
为什么不重写clone方法就不能在其他类里直接调用?
为什么严格按照重写方式进行后还是浅拷贝?
关于第一个问题我又有一点点思考,我觉得会不会是对于其他对象调用的时候,是直接按照父类去对待的,但是父类不在同个包下,此时的实例对象也不是测试类的对象,所以对于测试类来说它此时既不是子类也没有同个包,所以就会报错,就是相当于哪怕我创建的是MyClone的对象,但是在该对象内部压根没clone这个方法,但是父类有,但是此时不在同个包下,且此时的类是测试类,虽然它是子类,但是实例对象不是它,是MyClone类的,但是MyClone类没这个方法,所以看父类,是protected,不是子类在使用这个方法,所以报错。。
感觉还是有问题,但是还是别去纠结啦
二编:
懂了
你这是没理解访问修饰符导致的疑问。object里的clone方法是protected修饰的,protected修饰的方法,在子类里是可以直接访问的,但并不代表子类对象可以访问。注意:子类和子类对象是2个概念。