只保留重写的clone方法 String name;int age; Man man;@Overrideprotected Objectclone()throws CloneNotSupportedException{// 调用Object的clone,完成对象的拷贝returnsuper.clone();}}classManimplementsCloneable{ String name;int ID; 必要的方法均在此省略。。。 }
运行结果:
Person{name='null', age=0} Person{name='null', age=0} false	//这个false表示两个对象的地址值不相同,是两个对象 Man{name='乙', ID=111} Man{name='乙', ID=111} true	//表示两个person对象共用一个man

深拷贝实现

publicstaticvoidmain(String[] args)throws CloneNotSupportedException{//深拷贝 Man1 man1=newMan1("甲",111); Person1 p3=newPerson1(); p3.setMan1(man1); Person1 p4=(Person1) p3.clone(); System.out.println(p3); System.out.println(p4); System.out.println(p3== p4); p3.man.setName("乙"); System.out.println(p3.man); System.out.println(p4.man); System.out.println(p3.man== p4.man);}classPerson1implementsCloneable{ String name;int age; Man1 man; Person类中的get,set,toString等方法在此省略。只保留重写的clone方法@Overrideprotected Objectclone()throws CloneNotSupportedException{// 调用Object的clone,完成对象的拷贝 Person1 per=(Person1)super.clone(); peo.man=(Man1) man.clone();return per;}}classMan1implementsCloneable{ String name;int ID; 必要的方法均在此省略。。。@Overrideprotected Objectclone()throws CloneNotSupportedException{returnsuper.clone();}}
运行结果:
Person{name='null', age=0} Person{name='null', age=0} false	//这个false表示两个对象的地址值不相同,是两个对象 Man{name='乙', ID=111} Man{name='甲', ID=111} false	//这个false表示它们的man是两个不同的对象