如果所有类都扩展了对象,为什么他们都不能调用clone

时间:2012-07-29 06:59:13

标签: java

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

这会给出一个错误,说它受到保护。不能对象的任何子类调用该方法。

3 个答案:

答案 0 :(得分:7)

因为clone()是Object类

中的受保护方法

如果您希望公开访问clone(),则需要在您的类中覆盖该方法。

@override
public Object clone()
{
    return super.clone();
}

答案 1 :(得分:3)

此处的问题是Main不会延伸Cloned。目前,Main可以拨打Main.clone,但不能拨打Cloned.clone

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

答案 2 :(得分: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();
    }


}