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

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 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)
  • ¥35 lstm时间序列共享单车预测,loss值优化,参数优化算法
  • ¥15 Python中的request,如何使用ssr节点,通过代理requests网页。本人在泰国,需要用大陆ip才能玩网页游戏,合法合规。
  • ¥100 为什么这个恒流源电路不能恒流?
  • ¥15 有偿求跨组件数据流路径图
  • ¥15 写一个方法checkPerson,入参实体类Person,出参布尔值
  • ¥15 我想咨询一下路面纹理三维点云数据处理的一些问题,上传的坐标文件里是怎么对无序点进行编号的,以及xy坐标在处理的时候是进行整体模型分片处理的吗
  • ¥15 一直显示正在等待HID—ISP
  • ¥15 Python turtle 画图