gpt4 book ai didi

java - 即使我们可以使用以下代码片段进行深度克隆,为什么我们还要实现 Cloneable

转载 作者:搜寻专家 更新时间:2023-10-31 20:18:19 25 4
gpt4 key购买 nike

public class Color {
String color;
Color(String color)
{
this.color=color;
}
}


public class ColoredCircle {
int x;
Color color;
ColoredCircle(int x, Color color)
{
this.x=x;
this.color=color;
}
public Object testClone()
{
Color c = new Color(this.color.color);
ColoredCircle cc1 = new ColoredCircle(this.x, c);
return cc1;
}
}

在上面提到的 ColoredCircle 类中,我们有一个名为 testClone() 的方法,它的工作原理与深度克隆完全相同。现在我对是否有必要实现 Cloneable 来克隆这一事实感到困惑?上面的程序是不是深度克隆?

最佳答案

为了调用 Object.clone() 不抛出异常,需要实现 Cloneable 接口(interface)。 (这就是 Cloneable 的全部目的。)

您没有使用 Object.clone()。因此,是否实现 Cloneable 没有任何效果。它与您调用的方法无关。您的方法可以称为 testClone(),它最多可以调用 super.clone()。或者您的方法可能被称为 clone() 而它不能使用 super.clone()。重要的是您没有使用 Object.clone()

使用 Object.clone() 的优点是它返回的对象与调用它的对象具有完全相同的运行时类。另一方面,您的方法总是创建一个新的 ColoredCircle 对象。因此,当您的 testClone() 方法在子类中被继承时,它仍然会创建一个 ColoredCircle,而不是该子类的实例。而如果您的方法调用了 super.clone(),它将能够获取当前实例所属的任何子类的实例。

关于java - 即使我们可以使用以下代码片段进行深度克隆,为什么我们还要实现 Cloneable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33126799/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com