public class Test {public static void main(String[] args) {Object obj=new Object();obj.clone();//报错 说该方法不可见}}Object是所有类的父类 包括这里的Test Test算得上Object的不同包下的子类 clone方法是protected修饰的 为什么不能调用呢?
2 回答
手掌心
TA贡献1942条经验 获得超3个赞
调用Object.clone()时,当我们在自己的类里覆盖clone()时,对于super.clone()来说是最关键的是:根类中的clone()方法负责建立正确的存储容量,并通过“按位复制”将二进制位从原始对象中复制到新对象的存储空间。也就是说,它并不只是预留存储空间以及复制一个对象——实际需要调查出欲复制之对象的准确大小,然后复制那个对象。由于所有这些工作都是在由根类定义之clone()方法的内部代码中进行的(根类并不知道要从自己这里继承出去什么),所以大家或许已经猜到,这个过程需要用RTTI判断欲克隆的对象的实际大小。采取这种方式,clone()方法便可建立起正确数量的存储空间,并对那个类型进行正确的按位复制。
胡子哥哥
TA贡献1825条经验 获得超6个赞
查看jdk api:按照惯例,返回的对象应该通过调用 super.clone 获得,一个类及其所有的超类(Object 除外)都遵守此约定
所以Object不能调用clone(),可以按照下面方式
Test test = new Test();
test.clone();
添加回答
举报
0/150
提交
取消