理解Java中的Object.clone()

Per*_*akR 3 java

我知道使用这种克隆机制并不是一个好主意(因为它像某些作者所说的那样"破坏"),尽管我需要帮助理解它是如何工作的.我们给出了以下类层次结构:

class N implements Cloneable{
    protected int num;
    public N clone() throws CloneNotSupportedException{
        return (N)super.clone();
    }
}

class M extends N{
    protected String str;
    public M clone() throws CloneNotSupportedException{
        M obj = (M)super.clone();
        obj.setString(new String(this.str));
        return obj;
    }
    void setString(String str){
        this.str = str;
    }
}
Run Code Online (Sandbox Code Playgroud)

自从N扩展后Object,如何super.clone()返回一个实例Nsuper.clone()实际上Object.clone()是返回对类对象的引用Object.那我们为什么能把它投到NN有一个num不在课堂上的成员Object.默认行为如何实际设法自动克隆此变量(因为它在类中没有它的记录Object)?

此外,M也是如此.M.clone()我们将一个对象从类N(返回super.clone())转换为类的对象M.我知道所有这些都是有效的,但我不明白为什么.

Mar*_*nik 6

Object#clone是一个本机方法,它创建对象的低级二进制副本,从而生成同一个类的另一个实例.因此,向下倾斜是安全的.

请注意,这是获得多态克隆方法的唯一方法.