Java的所有类都默认继承 java.lang.Object 类,在 java.lang.Object 类中有一个方法 clone()。JDK API的说明文档解释这个方法将返回Object对象的一个拷贝。要说明的有两点:一是拷贝对象返回的是一个新对象,而不是一个引用。二是拷贝对象与用 new操作符返回的新对象的区别就是这个拷贝已经包含了一些原来对象的信息,而不是对象的初始信息。
对于Java中使用 clone() 方法有几点需要注意
1:被clone的类必须实现 Cloneable 接口,Cloneable 接口实际上是个标识接口,没有任何接口方法,如果不实现 Cloneable 接口会报 java.lang.CloneNotSupportedException。
2:实现 Cloneable 接口的类应该使用公共方法重写 Object.clone()(它是受保护的)。某个对象实现了此接口就克隆它是不可能的。即使 clone() 方法是反射性调用的,也无法保证它将获得成功。
3:写 clone() 方法时,通常都有一行代码 super.clone(); clone 有缺省行为,super.clone();因为首先要把父类中的成员复制到位,然后才是复制自己的成员
public class Clone implements Cloneable { @Override public Clone clone() { try { Clone clone = (Clone) super.clone(); return clone; } catch (CloneNotSupportedException e) { throw new InternalError(e); } } }