qq_17852541
泥煤少年的博客
采纳率100%
2020-06-08 15:14 阅读 329
已采纳

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();
    }
}

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 复制链接分享

1条回答 默认 最新

  • 已采纳
    weixin_41390483 将爱埋在心底 2020-06-08 15:21

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

    点赞 1 评论 复制链接分享