1. 程式人生 > >Cloneable介面與Clone方法

Cloneable介面與Clone方法

Object類中有一clone()方法,定義如下:

protected native Object clone() throws CloneNotSupportedException;

為native方法,且訪問許可權為protected(包內及其子類)。

jdk官方文件建議,對於任意物件x,表示式 x.clone() != x 為true、x.clone().equals(x) 為true、x.clone().getClass() == x.getClass() 為true,但這並不是必須的。

對於在任何物件上呼叫clone()方法,其class必須實現Cloneable介面,否則會丟擲CloneNotSupportedException異常。

native clone()方法往往會建立一個物件例項,並且拷貝物件內部的資料結構,但這個過程沒有呼叫構造器

Object類的native clone方法預設為淺拷貝(shallow copy),即物件引用型別的成員會拷貝指標值。

如果需要自定義一些拷貝物件的成員,可以通過呼叫super.clone()得到拷貝物件,之後自行修改物件的成員後再將其return。