1.Object中的clone执行的时候使用了RTTI(run-time type identification)的机制,动态得找到目前正在调用clone方法的那个reference,根据它的大小申请内存空间,然后进行bitwise的复制,将该对象的内存空间完全复制到新的空间中去,从而达到shallowcopy的目的。
所以你调用super.clone() 得到的是当前调用类的副本,而不是父类的副本。根本没有必用调用this.clone();
2.要让实例调用clone方法就需要让此类实现Cloneable接口,API里面还有句话是:如果在没有实现 Cloneable 接口的实例上调用 Object 的 clone 方法,则会导致抛出 CloneNotSupportedException 异常,这便是“合法”的含义。 但请注意,Cloneable接口只是个标签接口,不含任何需要实现的方法,就像Serializable接口一样。
总之,一般如果你的子类没有特殊需要而重写clone()方法就直接用super.clone() 就行了。
- 浏览: 30492 次
- 性别:
- 来自: 北京
最新评论
-
xwl1991:
String str="1989-11-23 12: ...
java.util.Date和java.sql.Date转换
相关推荐
在Java中,对象克隆可以通过实现`Cloneable`接口并覆盖`Object`类中的`clone()`方法来完成。`Cloneable`接口本身不包含任何方法,只是一个标记接口,表明该类的对象可以被克隆。`Object`类的`clone()`方法会创建一个...
在Java中,浅拷贝可以通过实现`Cloneable`接口并重写`clone()`方法来完成。以下是一个简单的浅拷贝示例: ```java public class Person implements Cloneable { private String name; private int age; private ...
MyClass cloned = (MyClass) super.clone(); cloned.obj = (MyObject) this.obj.clone(); // 假设MyObject也实现了Cloneable // 对其他复杂类型的属性执行类似的深复制操作 return cloned; } } ``` 在上述代码...
在标题“编程语言java对象复制.pdf”和描述“编程语言java对象复制.pdf”中,明确指出了文档的主题是关于Java编程语言中对象复制的技术知识。在给出的内容部分中,通过具体的Java代码示例,讨论了在Java中实现对象...
**浅复制** 的实现可以通过`Object.clone()`方法来完成,但需要注意的是,`clone()`方法默认只进行浅复制,且要求类实现`Cloneable`接口: ```java public class Person implements Cloneable { // 其他属性和方法...
在Java中,浅复制可以通过实现`Cloneable`接口并覆盖`clone()`方法来完成。 ```java public class Person implements Cloneable { String name; Address address; // ... 构造器、getter和setter等 @Override...
- 实现`clone()`方法,通常需要调用`super.clone()`,但在某些情况下,可能需要更复杂的深拷贝逻辑。 - 当需要创建新对象时,客户端直接调用已有对象的`clone()`方法,得到的新对象与原对象相同,但内存地址不同。 ...
但需要注意,单纯实现此接口并不足以完成克隆,还需要重写Object类的clone()方法。 ### 实现方式 #### 1. 浅拷贝 对于浅拷贝,只需实现Cloneable接口并重写clone()方法即可。例如: ```java public class ...
如果类中包含一些对象的时候,我们就需要深复制,就是在对对象的复制之后,急着对对象中的非基本类型的属性也调用 clone 方法完成深复制。 Java 中的 clone() 方法是对象的复制方法,可以创建一个与原对象相同的新...
在面向对象的语言中,这通常是通过实现克隆接口或调用特殊语言提供的复制机制来完成的。 5.2 编写代码 在实际编程中,我们主要关注以下类的实现: 1. **原型接口(Prototype Interface)**:定义了一个克隆操作,...
3. **Client**: 客户端代码,使用原型模式来创建新的对象,通常通过调用`clone()`方法完成。 ### 实现步骤 1. **定义原型接口或抽象类**:在Java中,虽然不强制,但通常会定义一个接口`Prototype`,声明`clone()`...
return (ConcretePrototype) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException(e); } } // getter and setter methods... } ``` ### 工具支持 许多开发工具和框架提供...
return (EmailTemplate) super.clone(); } catch (CloneNotSupportedException e) { throw new RuntimeException("Clone operation failed", e); } } } ``` 通过这样的设计,我们可以在消息发送过程中,根据...
- 在Java中,实现原型模式可以通过实现`Cloneable`接口并重写`Object`类的`clone()`方法来完成。但是需要注意的是,`clone()`方法默认是浅拷贝,若需要实现深拷贝,需要自定义实现。 - 在Python等语言中,可以直接...
stu = (Student) super.clone(); // 这里实现了浅克隆 return stu; } ``` - **浅克隆**: 只复制所考虑的对象,而不复制它所引用的对象,也就是其中包含的对象不会被复制。 - **深克隆**: 不仅复制所考虑的对象,...
3. **覆写 clone 方法**:在子类中覆写 `clone` 方法,并调用 `super.clone()` 来创建新的实例。 4. **使用 clone 方法**:调用对象的 `clone()` 方法,返回一个新的与原对象相同内容的实例。 **对象转为字符串** ...