Cloneable接口分析
2014-01-09 16:17
260 查看
Cloneable接口是一个标记接口,也就是没有任何内容,定义如下:
这里分析一下这个接口的用法
clone方法是在Object中定义的,而且是protected型的,只有实现了这个接口,才可以在该类的实例上调用clone方法,否则会抛出CloneNotSupportException.Object中默认的实现是一个浅拷贝,也就是表面拷贝,如果需要实现深层次拷贝的话,必须对类中可变域生成新的实例.
加上 implements Cloneable 就可以了.可不可以不实现这个接口,但是覆盖Clone方法.
这样肯定没有问题的,不过已经和java中的clone机制没有关系了,下面举一个例子说明浅拷贝和深拷贝.
package java.lang; pubilc interface Cloneable { }
这里分析一下这个接口的用法
clone方法是在Object中定义的,而且是protected型的,只有实现了这个接口,才可以在该类的实例上调用clone方法,否则会抛出CloneNotSupportException.Object中默认的实现是一个浅拷贝,也就是表面拷贝,如果需要实现深层次拷贝的话,必须对类中可变域生成新的实例.
pubilc class Unsupported{ public Object clone(){ Object obj; try { obj=super.clone(); } catch (CloneNotSupportedException ex) { ex.printStackTrace(); //Exception was thrown } return obj;//返回的是null } }
加上 implements Cloneable 就可以了.可不可以不实现这个接口,但是覆盖Clone方法.
pubilc class Unnormal{ public Object clone(){ return new Unnormal(); } }
这样肯定没有问题的,不过已经和java中的clone机制没有关系了,下面举一个例子说明浅拷贝和深拷贝.
public class ShallowCopy implements Cloneable{ private Date begin; public Date getBegin(){ return this.begin; } public void setBegin(Date d){ this.begin=d; } public Object clone(){ Object obj=null; try { obj=super.clone(); } catch (CloneNotSupportedException ex) { ex.printStackTrace(); } return obj; } } public class DeepCopy implements Cloneable{ private Date begin; public Date getBegin(){ return this.begin; } public void setBegin(Date d){ this.begin=d; } public Object clone(){ DeepCopy obj=null; try { obj=(DeepCopy)super.clone(); } catch (CloneNotSupportedException ex) { ex.printStackTrace(); } obj.setBegin((Date)this.getBegin().clone()); return obj; } }
相关文章推荐
- Cloneable接口分析,学习了
- Cloneable接口分析
- JavaSE学习随笔(一) Cloneable接口源码分析与技术细节
- Cloneable接口分析
- Objcet.clone() 和Cloneable 接口
- Cloneable接口和循环冗余校验算法
- Java编程中实现Cloneable接口,让类的对象可以复制
- Java:对象克隆(Clone)及Cloneable接口、Serializable接口详解
- 通过实现Cloneable接口和覆盖clone()方法实现深度克隆,以及如何通过ByteArrayIOStream实现克隆
- cloneable接口的一段代码
- java cloneable接口及使用场景
- java基础入门补充(002) Cloneable接口 深复制与浅复制
- 接口Cloneable浅复制和深复制
- Java中Cloneable接口
- Cloneable 接口
- 关于default在泛型中的使用以及ICloneable接口中MemberwiseClone的浅表副本以及String.empty
- Cloneable接口和Object的clone()方法
- Java 深拷贝、浅拷贝及Cloneable接口
- Java对象克隆(Clone)及Cloneable接口、Serializable接口的深入探讨
- Cloneable接口的使用