0

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

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

4 回答 4

3

如果没有被覆盖,clone 方法将返回一个 Object。所以你必须转换结果:

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

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

于 2012-09-11T14:07:52.520 回答
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");
        }
    }

    ...
}

第一个错误是因为clone在类中有受保护的访问,Object第二个错误是因为它Object默认返回。

于 2012-09-11T14:19:48.900 回答
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();
}
}
}
于 2012-09-11T14:12:26.547 回答
0

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

于 2012-09-11T14:14:34.457 回答