/**
?*默認(rèn)得克隆方法為淺克隆只克隆對(duì)象得非引用類(lèi)型(或者非對(duì)象型)成員
?*要做深克隆有兩種方法:
?*a.覆寫(xiě)克隆方法(引用型成員的克隆方法)并且克隆時(shí)掉一次引用型成員的克隆方法!
?*b.序列化對(duì)象時(shí)默認(rèn)為深克隆
?*
?*/
?
?class Friend implements Cloneable {
?? int age;
?? String name;
??
??public Friend(int age, String name) {
???this.age = age;
???this.name = name;?
??}
??
??public Object clone () throws CloneNotSupportedException {
???return super.clone();?
??}
???
?}
?
?class Person implements Cloneable? {
?? int age;
??/* *
?? *String 類(lèi)型特殊,因?yàn)樗麨橐眯停宜赶虻闹禐槌A浚寺〕鰜?lái)的對(duì)象改變他的
?? *值實(shí)際上是改變了克隆出來(lái)對(duì)象String類(lèi)型成員的指向不會(huì)影響被克隆對(duì)象的值及其指向?
?? *因?yàn)橐帽豢寺×耍腋淖兊氖且玫闹赶颍?br />??*/
?? String name;
??
?? Friend f;
??
??public Person(int age, String name, Friend f) {
???this.age = age;
???this.name = name;
???this.f = f;
??}
??
??public Object clone () throws CloneNotSupportedException {
???Person p = (Person)super.clone();
???p.f = (Friend)p.f.clone();
???return p;?
??}
??
??public String toString(){
??StringBuffer sb = new StringBuffer();
??return super.toString()+sb.append("age=").append(age).
???append(",name=").append(name).
???append("friend=").append("f.name=").
???append(f.name).append("f.age=").append(f.age).toString();
?}
?}
?
?
?public class Clonetest {
??public static void main(String [] args)? throws CloneNotSupportedException {
???Person p = new Person(4,"haha",new Friend(5,"hehe"));
???Person p1 = (Person)p.clone();
???p1.name = "oop";
???p1.age = 10;
???p1.f.name = "ooad";
???p1.f.age = 56;
???System.out.println (p);
??System.out.println (p1);
??}?
?}