简单说 就是 复制 对象,,得到一个 对象的副本,,包含的 属性 值 与 原对象的 相同
Object 的 clone() 是 受保护的,且 它本身 不实现 Cloneable接口,,所以 当一个类
没有实现 Cloneable 接口,,就直接调用 super.clone() ——这时是调用的Object的clone() ,, 是不可以的
会导致抛出 CloneNotSupportedException 异常,需要先实现 Cloneable 接口,,
如: class A implements Cloneable { public Object clone() { Object obj=null; obj = super.clone(); return obj } }
main(...){ A a = new A(); A b = (A)a.clone(); }
影子克隆: 若还有个类 class B{..} 当在A 类中有属性 public B b = new B();
在克隆后,,会发现,,A类中的 一些基本属性 能被真正克隆,即 在改变 克隆得到的对象里的基本属性值时,,原对象不改变,,
而 在改变 B对象中的属性值 时,,原对象也 改变了,,,,
这样,,这个克隆 就不是真正的克隆了,,
深度克隆: 让 class B也实现Cloneable接口,,实现 clone(),, 在A 调用了super.clone()后,,也把它的属性 b = (Clone)b.clone();
这样引用对象和基本对象都 实现了 克隆。。。。
不能克隆的类: String,Integer,Double等等,,,它们没有实现 Cloneable接口,,且 是final 修饰的类,,
详细请看:http://www.blogjava.net/jerry-zhaoj/archive/2009/10/14/298141.html
|