泥煤少年的博客 2020-06-08 15:14 采纳率: 100%
浏览 547
已采纳

Java中对象克隆使用的Object中的clone方法(Protected),为什么不能外包子类中直接调用,而还要进行方法覆写?

protected方法不是说只要外包继承了就可以直接调用父类的protected方法吗?那Object类是被各类默认继承的,为什么clone方法还要子类覆写,不能直接调用呢?这点不懂,请教大家。下面是参考代码。

package cn.classes.demo;
public class 对象克隆 {
    public static void main(String[] args) throws Exception{
        Member memA=new Member("小明",18);
        Member memB=(Member)memA.clone();
        System.out.println(memA);
        System.out.println(memB);
    }
}
class Member implements Cloneable{
    private String name;
    private int age;
    public Member(String name, int age) {
        super();
        this.name = name;
        this.age = age;
    }
    @Override
    public String toString() {
        return "["+super.toString()+"]"+"name="+this.name+"age="+this.age;
    }
    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

  • 写回答

2条回答 默认 最新

  • 将爱埋在心底 2020-06-08 15:21
    关注

    对于你的提问:分两点回答
    第一点:
    由于Object根类clone()是protected修饰的,只能在目标类范围内使用,
    具有一定的局限性,这也是为什么一般重写都扩大成public范围。
    第二点:
    Object.clone()只是提供了浅层拷贝,对于基本类型的字段,可以说它成功克隆了。
    但对于对象型字段,它并没有实现克隆的功能,仅仅把对象的引用复制了,并没有创建新的对象,所以含有对象类型的话要进行深度克隆。
    当然如果你使用protected修饰的浅克隆就完全足够了的话。那就可以不用重写克隆方法了

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 在若依框架下实现人脸识别
  • ¥15 网络科学导论,网络控制
  • ¥100 安卓tv程序连接SQLSERVER2008问题
  • ¥15 利用Sentinel-2和Landsat8做一个水库的长时序NDVI的对比,为什么Snetinel-2计算的结果最小值特别小,而Lansat8就很平均
  • ¥15 metadata提取的PDF元数据,如何转换为一个Excel
  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同