如果我克隆了以下类的一个实例,并在实例化时覆盖了一个方法,克隆会有被覆盖的方法吗?我在https://docs.oracle.com/javase/7/docs/api/java/lang/Cloneable.html和https://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone()中没有找到任何关于这种行为的内容。
public class ToBeCloned implements Cloneable{
public int returnInt() {
return 1;
}
public void printTest() {
System.out.println("returnInt():"+returnInt()+"\nToBeCloned Original");
}
@Override
public ToBeCloned clone() throws CloneNotSupportedException {
return (ToBeCloned) super.clone();
}
}
答案是肯定的,克隆将至少包含javaSE-1.8中覆盖的方法。
以下程序及其输出说明了这一点:
public class OverridingMethods {
public static void main(final String[] args) {
final ToBeCloned toBeCloned1 = new ToBeCloned();
final ToBeCloned toBeCloned2 = new ToBeCloned() {
@Override
public int returnInt() {
return 2;
}
@Override
public void printTest() {
System.out.println("returnInt():"+returnInt()+"\nToBeCloned Overridden");
}
};
ToBeCloned toBeCloned3 = null;
ToBeCloned toBeCloned4 = null;
ToBeCloned toBeCloned5 = null;
try {
toBeCloned3 = toBeCloned1.clone();
toBeCloned4 = toBeCloned2.clone();
toBeCloned5 = toBeCloned4.clone();
} catch (final CloneNotSupportedException e) {
e.printStackTrace();
}
toBeCloned1.printTest();
toBeCloned2.printTest();
toBeCloned3.printTest();
toBeCloned4.printTest();
toBeCloned5.printTest();
}
}
程序的输出如下:
returnInt():1
ToBeCloned Original
returnInt():2
ToBeCloned Overridden
returnInt():1
ToBeCloned Original
returnInt():2
ToBeCloned Overridden
returnInt():2
ToBeCloned Overridden
这证明重写的方法被保留,即使克隆已经克隆的实例。
问题内容: 我需要在我的没有超类的对象中实现一个深层克隆。 处理超类(即)引发的检查的最佳方法是什么? 一位同事建议我按以下方式处理: 对我来说,这似乎是一个不错的解决方案,但我想将其扔给StackOverflow社区,以查看是否有我可以提供的其他见解。 问题答案: 你绝对必须使用吗?大多数人都同意是坏的。 如果你已经阅读了我书中有关克隆的内容,尤其是你在两行之间阅读的话,你会知道我认为它clon
我对在我想要克隆对象的类中重写克隆方法感到困惑。 因为Java中的每个类都是从Object扩展而来的,所以它应该有clone方法,但是我们仍然被迫重写clone。为什么要求? 另外,我在一些地方阅读了重写克隆对象并将其公之于众的内容。我想知道,为什么会这样? 欢迎提供所有答案。
问题内容: 我正在尝试制作对象(包括实例)的深层副本。我一直很警惕使用它,在这里似乎并没有覆盖它,所以我只是逐字段进行复制。理想情况下,会有一个复制构造函数,我可以这样使用: 不幸的是,我在API中找不到任何这样的功能,并且一直试图找出我需要获得确切副本的字段。因此,要复制这些日历之一,您将如何做?我在这里缺少一些简单的捷径吗? 问题答案: 已覆盖正在运行的内容,请使用它。此外,它没有深层的数据层
本文向大家介绍VMware虚拟机克隆的方法,包括了VMware虚拟机克隆的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了VMware虚拟机克隆的具体步骤,供大家参考,具体内容如下 一、环境 VMware 14 克隆系统CentOS6.8 二、开始克隆 被克隆系统处于关机状态,选择 虚拟机 > 管理 > 克隆 > 下一步 > 下一步(选择从当前状态虚拟机克隆或已有快照克隆)> 创
问题内容: 有没有不使用子进程来克隆git存储库的Python方法吗?我准备使用您推荐的任何种类的模块。 问题答案: 有GitPython。之前和内部都没有听说过,它依赖于git可执行文件的位置。此外,他们可能有很多错误。但这可能值得一试。 如何克隆: (这不是很好,我不知道这是否是受支持的方法,但确实有效。)
如何用clone()方法克隆Java对象 我有一个关于在java中正确实现类的方法的问题。我知道这是不好的做法,但我需要在考试中知道这一点…在上面的讨论中,他们说调用-但我不明白如果超级函数没有实现克隆会发生什么。例如,假设我有一个扩展Y的类X。X实现了Cl的,而Y没有。Y的方法应该抛出一个异常。那么在这种情况下我们该怎么办? 我能找到的所有解释都以某种方式假设所有超类都实现了克隆,或者至少我是这