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);
         }
    }
}