Cloneable介面是Java開發中常用的一個介面, 它的作用是使一個類的實例能夠將自身拷貝到另一個新的實例中,註意,這裡所說的“拷貝”拷的是對象實例,而不是類的定義,進一步說,拷貝的是一個類的實例中各欄位的值。 在開發過程中,拷貝實例是常見的一種操作,如果一個類中的欄位較多,而我們又採用在客戶端 ...
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()方法進行改寫,則調用此方法得到的對象即為淺拷貝