gpt4 book ai didi

java - Object.clone() protected 原因是什么

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:56:16 28 4
gpt4 key购买 nike

<分区>

Possible Duplicate:
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() has protected access in java.lang.Object at obj1.clone()

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

谢谢

与答案一起编辑:好吧,当我实现 Cloneable 接口(interface)并覆盖克隆方法时,我终于看到我的测试工具正在工作。它不适用于仅覆盖 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 的一个 protected 方法,这意味着您的代码不能简单地调用它。只有 Employee 类可以克隆 Employee 对象。

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

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

希望对其他人有帮助

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com