`
闫老三
  • 浏览: 102705 次
社区版块
存档分类
最新评论

java clone 克隆 super.clone

    博客分类:
  • Java
 
阅读更多

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对象的深克隆与浅克隆详解.zip(wcb2003)

    Java提供了两种主要的克隆方式:浅克隆(Shallow Clone)和深克隆(Deep Clone)。下面我们将深入探讨这两种克隆方法。 ### 浅克隆 浅克隆是指创建一个新的对象,其成员变量的值与原对象相同,但引用类型成员变量...

    java clone的小例子

    在Java编程语言中,`clone()`方法是一个非常重要的概念,特别是在对象复制和克隆方面。这个小例子将帮助初学者理解如何在Java中使用`clone()`来创建对象的副本。让我们深入探讨`clone()`方法以及它在实际编程中的...

    java Clone

    Java中的`clone`方法是Java语言提供的一种复制对象的方式,它允许创建一个对象的副本,这个副本与原对象具有相同的属性值,但它们是两个独立的对象,修改副本不会影响原对象。`clone`方法存在于Java的`java.lang....

    Clone详解.doc

    在`Employee`类中,我们重写了`clone()`方法,首先调用了`super.clone()`获取浅克隆的对象,然后对`hireDay`字段进行了深拷贝,即调用了`Date`对象的`clone()`方法。这样,新克隆的`Employee`对象就有了自己独立的`...

    JAVA浅克隆与深克隆

    测试类`Test.java`可以用来验证浅克隆和深克隆的效果,比如改变克隆对象的属性并检查原始对象是否受影响。 总结来说,Java中的克隆机制对于复制对象和维护对象状态的独立性至关重要。浅克隆适用于不涉及复杂引用...

    Java深浅clone

    在本文中,我们将深入探讨Java中的浅克隆(shallow clone)和深克隆(deep clone),并结合测试代码进行分析。 首先,让我们理解`Cloneable`接口。在Java中,如果一个类想要支持`clone()`方法,它必须实现`...

    java 深克隆 浅克隆

    - 实现`Cloneable`接口时,Java官方建议覆盖`clone()`方法并抛出`CloneNotSupportedException`,以避免未实现克隆时的运行时异常。 - 深克隆可能消耗更多内存和时间,因为它需要创建完整的对象树副本。 - 如果对象中...

    Java Clone(类的复制)实例代码

    在Java编程语言中,`Clone`机制是一种对象复制的方式,允许创建一个现有对象的副本。在Java中,对象的默认复制是浅复制(shallow copy),这意味着只复制对象本身,而不复制它引用的对象。要实现深复制(deep copy)...

    JAVA_对象克隆

    在Java中,对象克隆可以通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来完成。`Cloneable`接口本身不包含任何方法,只是一个标记接口,表明该类的对象可以被克隆。`Object`类的`clone()`方法会创建一个...

    java深度克隆

    在`clone()`方法中调用了`super.clone()`和`homeAddr.clone()`,确保了深度克隆。 ##### 3.2 使用序列化与反序列化 这种方法利用Java的序列化机制实现深度克隆。具体步骤如下: 1. **实现Serializable接口**:...

    计算机等级考试二级java模拟题三.pdf

    计算机等级考试二级Java模拟题涉及了... return super.clone(); } catch (CloneNotSupportedException e) { throw new AssertionError(e); } } } ``` 以上程序实现了对象的深度克隆,通过序列化和反序列化实现。

    浅析Java中clone()方法浅克隆与深度克隆

    Java中的克隆(Clone)机制是面向对象编程中一种创建对象副本的方法,它允许程序员创建一个已有对象的新实例,新实例的数据与原对象相同。在Java中,克隆分为两种类型:浅克隆(Shallow Clone)和深度克隆(Deep ...

    克隆和序列化(Java )

    MyClass cloned = (MyClass) super.clone(); // 对于深克隆,需要为nestedObj创建新的副本 cloned.nestedObj = this.nestedObj.clone(); return cloned; } } ``` **二、序列化** 1. **序列化定义**:序列化...

    Java clone方法详解及简单实例

    在上面的代码中,`CloneClass`实现了`Cloneable`接口,并重写了`clone`方法,调用`super.clone()`进行克隆。 4. **注意事项**: - 如果没有实现`Cloneable`接口,调用`clone`方法会抛出`...

    Java的clone方法[归类].pdf

    在Java中,任何类都可以被克隆,但默认的`Object`类的`clone()`方法仅提供浅复制,即如果对象中包含其他对象的引用,这些引用的对象不会被复制,而是共享。因此,如果我们想要实现深复制,需要自定义`clone()`方法,...

    Java对象的复制克隆

    return super.clone(); } } Container original = new Container(); Container deepCopy = (Container) original.clone(); ``` 在这个例子中,`deepCopy` 是通过 `clone()` 方法创建的,它创建了一个新的 `...

Global site tag (gtag.js) - Google Analytics