Java技巧:深拷贝的两种方式2(转)

    ②继承自java.lang.Object类的clone()方法是浅复制。以下代码可以证明之。
        
        
        
        
    1. class Professor   
    2. {   
    3.     String name;   
    4.     int age;   
    5.     Professor(String name,int age)   
    6.     {   
    7.         this.name=name;   
    8.         this.age=age;   
    9.     }   
    10. }   
    11. class Student implements Cloneable   
    12. {   
    13.     String name;//常量对象。   
    14.     int age;   
    15.     Professor p;//学生1和学生2的引用值都是一样的。   
    16.     Student(String name,int age,Professor p)   
    17.     {   
    18.         this.name=name;   
    19.         this.age=age;   
    20.         this.p=p;   
    21.     }   
    22.     public Object clone()   
    23.     {   
    24.         Student o=null;   
    25.         try   
    26.         {   
    27.             o=(Student)super.clone();   
    28.         }   
    29.         catch(CloneNotSupportedException e)   
    30.         {   
    31.             System.out.println(e.toString());   
    32.         }   
    33.         o.p=(Professor)p.clone();   
    34.         return o;   
    35.     }   
    36. }   
    37. public static void main(String[] args)   
    38.     {   
    39.       Professor p=new Professor("wangwu",50);   
    40.       Student s1=new Student("zhangsan",18,p);   
    41.       Student s2=(Student)s1.clone();   
    42.       s2.p.name="lisi";   
    43.      s2.p.age=30;   
    44. System.out.println("name="+s1.p.name+","+"age="+s1.p.age);//学生1的教授   
    45.                                                                                                                 //成为lisi,age为30。   
    46. }   
    那应该如何实现深层次的克隆,即修改s2的教授不会影响s1的教授?代码改进如下。

你可能感兴趣的:(java,职场,休闲)