/** * * @author Administrator * 使对象能被克隆必须实现Cloneable接口,且须重写Object的clone方法,此类中所有引用类型也必须能被克隆。 */ public class CloneableDemo { public static void main(String[] args) throws CloneNotSupportedException { Clon1 c1 = new Clon1(); Clon2 c2 = new Clon2(); c2.name2 = "dd"; c1.c2 = c2; c1.name1 = "cc"; //将c1克隆 Clon1 c11 = c1.clone(); System.out.println(c1 == c11); //false System.out.println(c1.name1 == c11.name1); //true c11.name1 = "ddd"; System.out.println(c1.name1 == c11.name1); //false c1.name1 = "ddd"; System.out.println(c1.name1 == c11.name1); //true System.out.println(c1.c2 == c11.c2);//false System.out.println(c11.c2.name2 == c1.c2.name2);//true } } class Clon1 implements Cloneable{ public String name1; //属性c2为Clon2类型的对象 public Clon2 c2; protected Clon1 clone() throws CloneNotSupportedException{ Clon1 c1 = (Clon1)super.clone(); c1.c2 = c2.clone(); return c1; } } /* * 此类同样须实现Cloneable接口,重写clone方法 */ class Clon2 implements Cloneable{ public String name2; protected Clon2 clone()throws CloneNotSupportedException{ Clon2 c2 = null; c2 = (Clon2)super.clone(); return c2; } }