我说的不是那个抛异常的问题以及cloneable接口的问题 而是编译根本就不通过啊!!!

public class Test {

public static void main(String[] args) {
Object obj=new Object();
obj.clone();//报错 说该方法不可见
}
}

Object是所有类的父类 包括这里的Test Test算得上Object的不同包下的子类 clone方法是protected修饰的 为什么不能调用呢?

慕运维8079593
浏览 89回答 2
2回答

手掌心

调用Object.clone()时,当我们在自己的类里覆盖clone()时,对于super.clone()来说是最关键的是:根类中的clone()方法负责建立正确的存储容量,并通过“按位复制”将二进制位从原始对象中复制到新对象的存储空间。也就是说,它并不只是预留存储空间以及复制一个对象——实际需要调查出欲复制之对象的准确大小,然后复制那个对象。由于所有这些工作都是在由根类定义之clone()方法的内部代码中进行的(根类并不知道要从自己这里继承出去什么),所以大家或许已经猜到,这个过程需要用RTTI判断欲克隆的对象的实际大小。采取这种方式,clone()方法便可建立起正确数量的存储空间,并对那个类型进行正确的按位复制。

胡子哥哥

查看jdk api:按照惯例,返回的对象应该通过调用 super.clone 获得,一个类及其所有的超类(Object 除外)都遵守此约定所以Object不能调用clone(),可以按照下面方式Test test = new Test();test.clone();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java