来自对象的方法 clone() 不可见?

2022-08-31 21:01:52

问题:

package GoodQuestions;
public class MyClass {  
    MyClass() throws CloneNotSupportedException {
        try {
            throw new CloneNotSupportedException();
        } catch(Exception e) {
            e.printStackTrace();
        }
    }   

    public static void main(String[] args) {    
        try {
            MyClass  obj = new MyClass();
            MyClass obj3 = (MyClass)obj.clone();            
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
    }
}

在这里,类'MyClass'可以通过调用'Object'类中的克隆方法来克隆自己的对象。当我尝试在同一包“GoodQuestions”中的另一个类('TestSingleTon')中克隆这个类('MyClass')时,它会引发以下编译时错误。

'对象类型中的方法 clone() 不可见'

所以这是它抛出上述错误的代码吗?

package GoodQuestions;
public class TestSingleTon {
    public static void main(String[] args) {
        MyClass  obj = new MyClass();
        MyClass obj3 = obj.clone(); ---> here is the compile error.
    }
}

答案 1

clone()具有受保护的访问权限。将其添加到MyClass

public Object clone(){  
    try{  
        return super.clone();  
    }catch(Exception e){ 
        return null; 
    }
}

同时更改为public class MyClass implements Cloneable


答案 2

发生此错误的原因是,在对象类中,clone() 方法受保护。因此,您必须在相应的类中重写 clone() 方法。在 MyClass 中添加以下代码

@Override
protected Object clone() throws CloneNotSupportedException {

    return super.clone();
}

同时实现可克隆接口。例如。public class MyClass implements Cloneable