Java write方法的行为如何类似于对象的clone方法?
我观察到克隆是Java write方法的行为如何类似于对象的clone方法?,java,class,oop,object,access-specifier,Java,Class,Oop,Object,Access Specifier,我观察到克隆是Object类的方法,Object是每个类的超类。在每个类中,我都将克隆作为覆盖方法,假设我创建了名为A的类,如果我没有在class A中覆盖clone方法,并且为一个对象创建了一个对象,我没有在对象中访问clone方法 我在oop中缺少的概念有两个问题:clone()是对象的受保护的方法,因此只能从子类内部调用它,除非覆盖它并将其公开。其次,除非类实现了Cloneable,否则调用clone()将抛出CloneNotSupportedException。典型的方法是: class
Object
类的方法,Object
是每个类的超类。在每个类中,我都将克隆作为覆盖方法,假设我创建了名为A
的类,如果我没有在class A
中覆盖clone
方法,并且为一个对象创建了一个对象,我没有在对象中访问clone方法
我在oop中缺少的概念有两个问题:
clone()
是对象的受保护的方法,因此只能从子类内部调用它,除非覆盖它并将其公开。其次,除非类实现了Cloneable
,否则调用clone()
将抛出CloneNotSupportedException
。典型的方法是:
class A implements Cloneable {
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}
(您可以消除try/catch块,并声明您的clone()
方法来抛出CloneNotSupportedException
。该方法会更简单,但所有调用代码都必须处理异常。)
由于Java允许您在重写方法时缩小返回类型,因此可以重新定义clone()
以返回a
,从而避免调用代码必须强制转换:
class A implements Cloneable {
public A clone() {
try {
return (A) super.clone();
} catch (CloneNotSupportedException e) {
throw new RuntimeException("Impossible exception!", e);
}
}
}