java super.clone 实现Cloneable接口
首先,如果允许本来被克隆,需要实现 实现Cloneable接口
并且重写clone方法,且方法最好为public,这样方便别人调用
其中:super.clone并不是简单的说成是调用父类的clone方法,这样的话你很难想通,为什么调用父类的clone,对吧?
因为Object的clone方法使用了RTTI(运行时类型识别)机制,可以动态的找到目前正在调用clone方法的那个引用,并找到它指向的对象,然后根据这个对象的大小去申请内存空间,然后进行bitwise(逐位)的复制, 将该对象的内存空间完全复制到新的空间中去,
从而达到克隆的目的.
即,谁调用clone方法,就克隆这引用指向的对象
子类没有clone方法,使用this.clone()则直接异常,,因为是子类继承Object的
比如你有一个Student类实现了Cloneable接口,重写了clone方法,但是重写的clone方法里的执行super.clone,并不是说和自身无关,
例如: Student stu=new student();
Student stu1=(Student)stu.clone();
当执行stu.clone();时候,虽然clone方法里面执行的是super.clone(),但是Object的clone方法会寻找当前正在调用clone方法的那个引用,这里这个引用就是stu,然后自动的去找stu指向的对象,然后进行逐位赋值,从而达到克隆的目的,
还有继承的时候,A类实现了Cloneable接口,重写了了clone方法,那继承A类的类就不必实现Cloneable接口以及重写clone方法了,因为A类已经这么做了。而当子类调用clone方法的时候,是根据调用clone方法的当前引用去克隆的,
还是那句话,谁调用clone方法,就克隆当前引用指向的对象
ps:网上都是互相抄的,我用自己理解翻译解释一下,呵呵
相关推荐
Java提供了两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。下面我们将深入探讨这两种克隆方法。 ### 浅克隆 浅克隆是指创建一个新的对象,其成员变量的值与原对象相同,但引用类型成员变量...
在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...
Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....
在`Employee`类中,我们重写了`clone()`方法,首先调用了`super.clone()`获取浅克隆的对象,然后对`hireDay`字段进行了深拷贝,即调用了`Date`对象的`clone()`方法。这样,新克隆的`Employee`对象就有了自己独立的`...
测试类`Test.java`可以用来验证浅克隆和深克隆的效果,比如改变克隆对象的属性并检查原始对象是否受影响。 总结来说,Java中的克隆机制对于复制对象和维护对象状态的独立性至关重要。浅克隆适用于不涉及复杂引用...
在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让我们理解`Cloneable`接口。在Java中,如果一个类想要支持`clone()`方法,它必须实现`...
- 实现`Cloneable`接口时,Java官方建议覆盖`clone()`方法并抛出`CloneNotSupportedException`,以避免未实现克隆时的运行时异常。 - 深克隆可能消耗更多内存和时间,因为它需要创建完整的对象树副本。 - 如果对象中...
在Java编程语言中,`Clone`机制是一种对象复制的方式,允许创建一个现有对象的副本。在Java中,对象的默认复制是浅复制(shallow copy),这意味着只复制对象本身,而不复制它引用的对象。要实现深复制(deep copy)...
在Java中,对象克隆可以通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来完成。`Cloneable`接口本身不包含任何方法,只是一个标记接口,表明该类的对象可以被克隆。`Object`类的`clone()`方法会创建一个...
在`clone()`方法中调用了`super.clone()`和`homeAddr.clone()`,确保了深度克隆。 ##### 3.2 使用序列化与反序列化 这种方法利用Java的序列化机制实现深度克隆。具体步骤如下: 1. **实现Serializable接口**:...
计算机等级考试二级Java模拟题涉及了... return super.clone(); } catch (CloneNotSupportedException e) { throw new AssertionError(e); } } } ``` 以上程序实现了对象的深度克隆,通过序列化和反序列化实现。
Java中的克隆(Clone)机制是面向对象编程中一种创建对象副本的方法,它允许程序员创建一个已有对象的新实例,新实例的数据与原对象相同。在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep ...
MyClass cloned = (MyClass) super.clone(); // 对于深克隆,需要为nestedObj创建新的副本 cloned.nestedObj = this.nestedObj.clone(); return cloned; } } ``` **二、序列化** 1. **序列化定义**:序列化...
在上面的代码中,`CloneClass`实现了`Cloneable`接口,并重写了`clone`方法,调用`super.clone()`进行克隆。 4. **注意事项**: - 如果没有实现`Cloneable`接口,调用`clone`方法会抛出`...
在Java中,任何类都可以被克隆,但默认的`Object`类的`clone()`方法仅提供浅复制,即如果对象中包含其他对象的引用,这些引用的对象不会被复制,而是共享。因此,如果我们想要实现深复制,需要自定义`clone()`方法,...
return super.clone(); } } Container original = new Container(); Container deepCopy = (Container) original.clone(); ``` 在这个例子中,`deepCopy` 是通过 `clone()` 方法创建的,它创建了一个新的 `...