【问题标题】:What is the reason behind Object.clone() is protected [duplicate]Object.clone() 受到保护的原因是什么[重复]
【发布时间】:2011-12-14 19:41:08
【问题描述】:

可能重复:
Why is the clone() method protected in java.lang.Object?

这是我检查克隆方法工作的测试代码,

class Test{
  int a;
  public void setA(int value){
a = value;
  }
  public int getA(){
   return a;
  }
}
class TestClass{   
   public static void main(String args[]){
   Test obj1 = new Test();
   obj1.setA(100);
   Test obj2 = obj1.clone();
   System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
   obj2.setA(9999);
   System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
 }
}

引发编译错误:clone() 在 obj1.clone() 处的 java.lang.Object 中具有受保护的访问权限

  1. 我在这里做错了什么?
  2. clone() 受到保护的原因是什么?

谢谢

与答案一起编辑:最后,当我实现 Cloneable 接口并覆盖 clone 方法时,我看到我的测试工具正在工作。它不适用于仅覆盖 Object 类的 clone() 方法。这是修改后的代码,

class Test implements Cloneable{
 int a;
 public void setA(int value){
a = value;
 }
 public int getA(){
return a;
 }
@Override
protected Test clone() throws CloneNotSupportedException{    
  return(Test) super.clone();  
  }   
}
class TestClass{   
  public static void main(String args[]){
     Test obj1 = new Test();
   obj1.setA(100);
   try{
     Test obj2 = (Test)obj1.clone();
     System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());
     obj2.setA(9999);
     System.out.println("obj1 A:"+obj1.getA()+" obj2 A:"+obj2.getA());       
   }catch(Exception e){
     System.out.println("ERror"+e);
     }         
    }
  }

2。 clone() 方法被保护的原因:我是从 Core Java 一书中找到的,

clone 方法是 Object 的受保护方法,这意味着您的代码不能简单地调用它。只有 Employee 类可以克隆 Employee 对象。

这种限制是有原因的。想想 Object 类可以实现克隆的方式。它对对象一无所知,所以它只能制作一个逐个字段的副本。如果对象中的所有数据字段都是数字或其他基本类型,复制字段就可以了。

但如果对象包含对子对象的引用,则复制该字段会为您提供对子对象的另一个引用,因此原始对象和克隆对象仍然共享一些信息。

希望这对其他人有帮助

【问题讨论】:

    标签: java clone


    【解决方案1】:

    您应该重写 Test 类中的 clone 方法。

    讨论了为什么它受到保护here 尽管似乎没有达成共识。

    【讨论】:

      猜你喜欢
      • 2015-01-29
      • 2011-10-07
      • 2013-11-17
      • 2011-03-14
      • 2011-10-02
      • 2015-10-23
      • 2018-06-10
      • 2011-02-22
      • 2015-07-25
      相关资源
      最近更新 更多