深拷贝和浅拷贝

2018/02/03 Java 共 768 字,约 3 分钟

深拷贝和浅拷贝

复制对象 or 复制引用

覆盖Object中的clone方法, 实现深拷贝

现在为了要在clone对象时进行深拷贝, 那么就要Clonable接口,覆盖并实现clone方法,除了调用父类中的clone方法得到新的对象, 还要将该类中的引用变量也clone出来。如果只是用Object中默认的clone方法,是浅拷贝的,

如何进行彻底的深拷贝

对于上面的例子来说,怎样才能保证两个Body对象完全独立呢?只要在拷贝Head对象的时候,也将Face对象拷贝一份就可以了。这需要让Face类也实现Cloneable接口,实现clone方法,并且在在Head对象的clone方法中,拷贝它所引用的Face对象。

Cloneable接口是一个空接口,仅用于标记对象,Cloneable接口里面是没有clone()方法,的clone()方法是Object类里面的方法!默认实现是一个Native方法

public class testDeepClone implements Cloneable {
    public int num = 0;
    public String str = "default";
    public A a;
 
    public Object clone() throws CloneNotSupportedException {
        testDeepClone o = (testDeepClone) super.clone();
        o.str = new String(this.str);
        o.a = (A) a.clone();
        return o;
    }
}
 
// 成员属性A必须为Cloneable的,否则无法Clone其组合的类
class A implements Cloneable {
    public Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}

Search

    Table of Contents