我观察到克隆是Object
类的方法,Object
是每个类的超类。在每个类中我都将克隆作为覆盖方法,假设我创建了一个名为A
的类,如果我没有在clone
覆盖class A
方法,并为A创建了一个对象我没有获得克隆方法在对象中的访问权限
我在oop中缺少的概念
答案 0 :(得分:2)
有两个问题:首先,clone()
是protected
的{{1}}方法,因此除非您覆盖它并将其公开,否则只能从子类中调用它。其次,除非您的类实现Object
,否则调用Cloneable
会抛出clone()
。典型的方法是:
CloneNotSupportedException
(你可以删除try / catch块并声明你的class A implements Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}
方法抛出clone()
。方法会更简单,但所有调用代码都必须处理异常。)
由于Java允许您在覆盖方法时缩小返回类型,因此可以重新定义CloneNotSupportedException
以返回clone()
,从而保存调用代码不必转换:
A