在我自己的类中调用clone()

时间:2012-09-11 14:05:13

标签: java clone

我知道 Object 类中有一个clone()方法,它被声明为protected,这意味着我可以在我自己的类中调用clone()因为每个类都继承自 Object 类,例如:

public class CloneTest
{
    public static void main(String args[])
    {
        Employee employee1 = new Employee(...);
        Employee employee2 = employee1.clone(); // but here has 2 errors
    }
}

class Employee
{
    ...
}

第一个错误是关于“对象中的访问受保护”的内容 第二个错误是“不兼容的类型”
为什么会发生这些错误?

4 个答案:

答案 0 :(得分:3)

如果没有覆盖,clone method将返回一个Object。所以你必须施展结果:

Employee employee2 = (Employee) employee1.clone();

第一个错误与Employee类的内容有关,我们没有看到。它是否覆盖克隆方法?它应该是从被调用类的其他类访问它的条件。

答案 1 :(得分:1)

Employee类应该看起来像这样clone()才能正常工作:

public class Employee implements Cloneable {
    ...

    public Employee clone() {
        try {
            return (Employee) super.clone();
        }
        catch(CloneNotSupportedException e) {
            throe new IllegalStateException("I forgot to implement cloneable");
        }
    }

    ...
}

第一个错误是因为cloneObject类中具有受保护的访问权限,而第二个错误是因为它默认返回Object

答案 2 :(得分:0)

第一个错误是因为.clone在Object类中受到保护。它不公开。

访问对象的.clone()方法的唯一方法是知道它具有一个具有公共.clone()方法的编译时类型。

覆盖clone

中的Employee方法
 class Employee implements Cloneable
{
   @Override
   protected Employee clone() throws CloneNotSupportedException {
    // TODO Auto-generated method stub
    return (Employee)super.clone();
}
}
}

答案 3 :(得分:0)

您需要做一些事情才能使用克隆方法。请参阅:http://www.javapractices.com/topic/TopicAction.do?Id=71