上一篇文章講述了淺拷貝和深拷貝的含義,並且給出了淺拷貝的一個例子
這篇文章在那個例子的實現上作出修改,實現深拷貝,代碼如下:
該段代碼讓School類(被引用的類)也實現了Cloneable接口,並且也重寫了clone()方法。然後改寫了Student的clone()方法。
從結果可以看出,學生s2改變其引用的學校的屬性,不會影響到學生s1所屬的學校的屬性,這就是深拷貝的含義。
上面是深拷貝的一個實現。
還可以通過序列化來實現對象的深拷貝,一個對象被序列化時會將對象和對象內部引用的其他的對象(遞歸下去)一起序列化
一個對象如果想要被序列化,那麼必須實現Serializable接口,這個接口也沒有定義任何方法,也是一個marker interface
將前一個例子進行改寫,用序列化的方法實現深拷貝的代碼如下: