关键代码片段
class InnerClass implements Cloneable {
// InnerClass 的成员变量和方法
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
class OuterClass implements Cloneable {
private InnerClass[] innerClassArray;
public OuterClass(InnerClass[] innerClassArray) {
this.innerClassArray = innerClassArray;
}
@Override
protected Object clone() throws CloneNotSupportedException {
OuterClass clonedOuter = (OuterClass) super.clone();
clonedOuter.innerClassArray = new InnerClass[innerClassArray.length];
for (int i = 0; i < innerClassArray.length; i++) {
clonedOuter.innerClassArray[i] = (InnerClass) innerClassArray[i].clone();
}
return clonedOuter;
}
}
原理说明
- 实现
Cloneable
接口:InnerClass
和OuterClass
都需要实现Cloneable
接口,这表明该类支持克隆操作。
- 重写
clone
方法:在InnerClass
中重写clone
方法,调用super.clone()
来进行浅拷贝。这样确保InnerClass
的实例可以被克隆。
OuterClass
的深拷贝:在OuterClass
的clone
方法中,首先调用super.clone()
进行浅拷贝,得到一个新的OuterClass
实例。然后,为innerClassArray
创建一个新的数组,其长度与原数组相同。接着,遍历原数组,对每个InnerClass
元素进行克隆,并将克隆后的元素放入新数组中。这样就实现了OuterClass
及其内部InnerClass
数组的深拷贝,即新的OuterClass
实例及其InnerClass
数组中的元素都是全新的对象,与原对象相互独立。