zoukankan      html  css  js  c++  java
  • JAVA对象克隆

     

     1> 为了获取对象的一份拷贝,我们可以利用Object类的clone()方法。

    2> 在派生类中覆盖基类的clone(),并声明为public。
    3> 在派生类的clone()方法中,调用super.clone()。
    4> 在派生类中实现Cloneable接口。
    4> 没有抽象方法的接口叫标识接口。
    5> 为什么我们在派生类中覆盖Object的clone()方法时,一定要调用super.clone()呢?在运行时刻,Object 的clone()方法能识别出你要复制的是哪一个对象,然后为此对象分配空间,并进行对象的复制,将原 始对象的内容一一复制到新的对象空间去。

    * 浅克隆是针对没有引用类型的变量来克隆。针对引用类型的克隆应该用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;
    }
    }
    改变学生s2的教授信息,打印s1教授信息,结果为:name=feifei,age=30.产生这个结果是因为String是一个常量类型.

    深克隆
    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;
    }
    }
    打印结果为:name=Bill.Gates,age=30,这就是深克隆.

    三千世界鸦杀尽,与卿共枕到天明
  • 相关阅读:
    震撼光效:Geomerics Enlighten Demo at GDC 2010
    CryEngine3SDK尝鲜
    李嘉诚:没有人愿意贫穷,但出路在哪(转自意林)
    OGRE手册脚本<texture_unit>
    《OgreBeginner'sGuidede》第七章翻译(原)
    李彦宏15年前搜索专利曝光:谷歌创始人拾惠(转)
    中国大侠vs生化战士(转)
    OGRE主要渲染流程简介(转)
    好运设计(史铁生散文)
    游戏设计的秘密——翻译GDC2010 blizzard的一个演讲【转】
  • 原文地址:https://www.cnblogs.com/Dragon-Tyrant/p/3735912.html
Copyright © 2011-2022 走看看