为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

慕运维8079593 2023-04-24 18:14:23
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()方法便可建立起正确数量的存储空间,并对那个类型进行正确的按位复制。

查看完整回答
反对 回复 2023-04-27
?
胡子哥哥

TA贡献1825条经验 获得超6个赞

查看jdk api:按照惯例,返回的对象应该通过调用 super.clone 获得,一个类及其所有的超类(Object 除外)都遵守此约定
所以Object不能调用clone(),可以按照下面方式
Test test = new Test();
test.clone();

查看完整回答
反对 回复 2023-04-27
  • 2 回答
  • 0 关注
  • 88 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信