泥煤少年的博客 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条)

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况