如果类没有实现Cloneable接口,调用super.clone()将会抛出CloneNotSupportedException异常。
super.clone()只是简单复制,如果对象带有可变属性(例如:数组),那么复制后的对象将和源对象引用同样的可变属性,安全性将出问题,为了避免该问题,需要采用自己实现深度克隆。
例如:
...
@SuppressWarnings("unchecked")
public Stack<T> clone() throws CloneNotSupportedException {
Stack<T> stack = (Stack<T>) super.clone();
stack.elements = elements.clone();
return stack;
}
...