^^^^^^^^^^^^^^^對(duì)象的克隆^^^^^^^^^^^^^
          1> 為了獲取對(duì)象的一份拷貝,我們可以利用Object類的clone()方法。
          2> 在派生類中覆蓋基類的clone(),并聲明為public。
          3> 在派生類的clone()方法中,調(diào)用super.clone()。
          4> 在派生類中實(shí)現(xiàn)Cloneable接口。
          4> 沒有抽象方法的接口叫標(biāo)識(shí)接口。
          5> 為什么我們?cè)谂缮愔懈采wObject的clone()方法時(shí),一定要調(diào)用super.clone()呢?在運(yùn)行時(shí)刻,Object?的clone()方法能識(shí)別出你要復(fù)制的是哪一個(gè)對(duì)象,然后為此對(duì)象分配空間,并進(jìn)行對(duì)象的復(fù)制,將原?始對(duì)象的內(nèi)容一一復(fù)制到新的對(duì)象空間去。

          * 淺克隆是針對(duì)沒有引用類型的變量來克隆。針對(duì)引用類型的克隆應(yīng)該用Deeply Clone。
          淺克隆:
          Code:
          class FleetClone
          {
          ?public static void main(String[] args)
          ?{
          ?? Professor p=new Professor("feiyang",23);
          ?? Student s1=new Student("zhangshan",18,p);
          ?? Student s2=(Student)s1.clone();
          ?? s2.p.name="feifei";
          ?? s2.p.age=30;
          ?? System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
          ?}
          }
          class Professor
          {
          ?String name;
          ?int age;
          ?Professor(String name,int age)
          ?{
          ? this.name=name;
          ? this.age=age;
          ?}
          }

          class Student implements Cloneable
          {
          ?Professor p;
          ?String name;
          ?int age;
          ?Student(String name, int age,Professor p)
          ?{
          ? this.name=name;
          ? this.age=age;
          ? this.p=p;
          ?}
          ?public Object clone()
          ?{
          ? Object o=null;
          ? try
          ? {
          ?? o=super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? return o;
          ?}
          }
          改變學(xué)生s2的教授信息,打印s1教授信息,結(jié)果為:name=feifei,age=30.產(chǎn)生這個(gè)結(jié)果是因?yàn)镾tring是一個(gè)常量類型.
          ?
          深克隆
          code:
          class DeeplyClone
          {
          ?public static void main(String[] args)
          ?{
          ?? Professor p=new Professor("feiyang",23);
          ?? Student s1=new Student("zhangshan",18,p);
          ?? Student s2=(Student)s1.clone();
          ?? s2.p.name="Bill.Gates";
          ?? s2.p.age=30;
          ?? System.out.println("name="+s1.p.name+","+"age="+s1.p.age);
          ?}
          }
          class Professor implements Cloneable
          {
          ?String name;
          ?int age;
          ?Professor(String name,int age)
          ?{
          ? this.name=name;
          ? this.age=age;
          ?}
          ?public Object clone()
          ?{
          ? Object o=null;
          ? try
          ? {
          ?? o=super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? return o;
          ?}
          }

          class Student implements Cloneable
          {
          ?Professor p;
          ?String name;
          ?int age;
          ?Student(String name, int age,Professor p)
          ?{
          ? this.name=name;
          ? this.age=age;
          ? this.p=p;
          ?}
          ?public Object clone()
          ?{
          ? //Object o=null;
          ? Student o=null;
          ? try
          ? {
          ?? o=(Student)super.clone();
          ? }
          ? catch(CloneNotSupportedException e)
          ? {
          ?? e.printStackTrace();
          ? }
          ? o.p=(Professor)p.clone();
          ? return o;
          ?}
          }
          打印結(jié)果為:name=Bill.Gates,age=30,這就是深克隆.

          主站蜘蛛池模板: 固安县| 卓资县| 武义县| 宁南县| 石棉县| 汉沽区| 云南省| 翼城县| 天长市| 北辰区| 碌曲县| 青河县| 习水县| 越西县| 金寨县| 平阳县| 清苑县| 万宁市| 阳新县| 平遥县| 个旧市| 大庆市| 石棉县| 包头市| 凭祥市| 乌鲁木齐县| 区。| 方城县| 房山区| 于都县| 昌宁县| 新平| 喀喇沁旗| 宁化县| 靖西县| 古丈县| 赤壁市| 莱州市| 濮阳县| 绍兴市| 静乐县|