MST

星途 面试题库

面试题:Java中使用clone方法实现深拷贝时,如何处理包含自定义对象的数组

假设你有一个类`OuterClass`,它包含一个`InnerClass`类型的数组成员变量。请写出使用`clone`方法实现`OuterClass`深拷贝的关键代码片段,并简要说明原理。
35.3万 热度难度
编程语言Java

知识考点

AI 面试

面试题答案

一键面试

关键代码片段

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;
    }
}

原理说明

  1. 实现Cloneable接口InnerClassOuterClass都需要实现Cloneable接口,这表明该类支持克隆操作。
  2. 重写clone方法:在InnerClass中重写clone方法,调用super.clone()来进行浅拷贝。这样确保InnerClass的实例可以被克隆。
  3. OuterClass的深拷贝:在OuterClassclone方法中,首先调用super.clone()进行浅拷贝,得到一个新的OuterClass实例。然后,为innerClassArray创建一个新的数组,其长度与原数组相同。接着,遍历原数组,对每个InnerClass元素进行克隆,并将克隆后的元素放入新数组中。这样就实现了OuterClass及其内部InnerClass数组的深拷贝,即新的OuterClass实例及其InnerClass数组中的元素都是全新的对象,与原对象相互独立。