我知道 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
{
...
}
第一个错误是关于“对象中的访问受保护”的内容
第二个错误是“不兼容的类型”
为什么会发生这些错误?
答案 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");
}
}
...
}
第一个错误是因为clone
在Object
类中具有受保护的访问权限,而第二个错误是因为它默认返回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