5
class Main {

    public static void main(String[] args) {
        new Cloned().clone();
    }
}

class Cloned implements Cloneable {
}

这给出了一个错误,说它是受保护的。object 的任何子类都不能调用该方法。

4

3 回答 3

7

因为clone()是 Object 类中的受保护方法

如果您想clone()公开访问,您需要在您的课程中覆盖该方法。

@override
public Object clone()
{
    return super.clone();
}
于 2012-07-29T07:02:08.073 回答
4

这里的问题是Main不扩展Cloned。就目前而言,Main可以调用Main.clone,但不能调用Cloned.clone

clone声明方法的事实在Object这里并不重要。除了公共方法,一个类只能调用自己继承的方法。这包括来自其超类的受保护方法,但不包括其他(超)类的受保护方法。

于 2012-07-29T07:03:10.543 回答
1
class Main implements Cloneable {

    public static void main(String[] args) {

    }
        
      
    @Override
    protected Object clone() throws CloneNotSupportedException {
        //TODO Auto-generated method stub
        return super.clone();
    }
}
于 2012-07-29T08:23:36.537 回答