Cloneable 接口實現原理

  Cloneable接口是Java開發中經常使用的一個接口, 它的做用是 使一個類的實例可以將自身拷貝到另外一個新的實例中,注意,這裏所說的「拷貝」拷的是對象實例,而不是類的定義,進一步說,拷貝的是一個類的實例中各字段的值。
 
  在開發過程當中,拷貝實例是常見的一種操做,若是一個類中的字段較多,而咱們又採用在客戶端中逐字段複製的方法進行拷貝操做的話,將不可避免的形成客戶端代碼繁雜冗長,並且也沒法對類中的私有成員進行復制,而若是讓須要具有拷貝功能的類 實現Cloneable接口,並 重寫clone()方法,就能夠經過調用clone()方法的方式簡潔地實現實例拷貝功能。
 
  深拷貝(深複製)和淺拷貝(淺複製)是兩個比較通用的概念,尤爲在C++語言中,若不弄懂,則會在delete的時候出問題,可是咱們在這幸虧用的是Java。雖然Java自動管理對象的回收,但對於深拷貝(深複製)和淺拷貝(淺複製),咱們仍是要給予足夠的重視,由於有時這兩個概念每每會給咱們帶來不小的困惑。
   淺拷貝是指拷貝對象時僅僅拷貝對象自己(包括對象中的基本變量),而不拷貝對象包含的引用指向的對象。深拷貝不只拷貝對象自己,並且拷貝對象包含的引用指向的全部對象。舉例來講更加清楚:對象 A1 中包含對 B1 的引用, B1 中包含對 C1 的引用。淺拷貝 A1 獲得 A2 , A2 中依然包含對 B1 的引用, B1 中依然包含對 C1 的引用。
   深拷貝則是對淺拷貝的遞歸,深拷貝 A1 獲得 A2 , A2 中包含對 B2 ( B1 的 copy )的引用, B2 中包含對 C2 ( C1 的 copy )的引用。
 
若不對clone()方法進行改寫,則調用此方法獲得的對象即爲淺拷貝
相關文章
相關標籤/搜索