public Employee clone() throws CloneNotSupportedException
   {
      // call Object.clone()
      Employee cloned = (Employee)super.clone(); 
      
      // clone mutable fields
      cloned.hireDay = (Date)hireDay.clone();
      
      return cloned;
   }如此句 是用的Employee clone 而有的例子我见到是 Object clone ,难道子类和父类都可以?
还有就是浅clone和深度clone到底差别在哪?怎样使非基本变量的变量clone?
请教各位大神

解决方案 »

  1.   

    哈哈,又来一个clone的,浅clone不会复制内部的成员变量对象,深度clone会复制内部成员变量
      

  2.   

    http://zzqrj.javaeye.com/blog/572562
    看看这个吧  看完这个  你应该就差不多理解了
      

  3.   

    如此句 是用的Employee clone 而有的例子我见到是 Object clone ,难道子类和父类都可以?Employee 是 Object的子类,当然可以这么写
      

  4.   

    浅clone复制的是栈的内容,如果你复制对象中存在对其他对象的引用,它只是复制那个引用,而不会去复制引用指向的对象。
    也就是如果a是b的浅clone对象,那么你修改a之内的对象的引用,就会造成b的变化,因为他们都指向同一个对象。深clone就是彻彻底底的做了一个新对象,a,b完全独立。
      

  5.   

    http://zzqrj.javaeye.com/blog/572562
    这个例子讲的这么详细,怎么会不懂?你哪里感到不解啊
      

  6.   

    class A{}class B{
      int i;
      A a = new A();//假设此时a指向的内存地址为@8888
    }如果浅clone B,clone了一个对象b。那么b.A指向的地址还是@8888
    如果是深clone,那么b.A会是一个新地址
      

  7.   

    就是在重写的clone方法中,除了调用super.clone()
    还要调用当前引用的clone()class A{
      int m;
    }class B{
      int i;
      A a = new A(); 
    public Object clone() {
        B obj = null;
        try {
          obj = (B)super.clone();
        } catch(CloneNotSupportedException e) {
          e.printStackTrace();
        }
        // 就是这句
        obj.a = (A)obj.a.clone();
        return obj; 
      }
    }
      

  8.   

    补充一下类要实现clone借口   implements Cloneable。漏写了
      

  9.   


    嗯 明白了 就是还得声明对变量a的clone吧
      

  10.   

    对,class A里面还有引用,在这里面也得这么写,如果有一长串类,得写很多,哈哈
      

  11.   


    崩溃了 难道JAVA没有更好的克隆吗?直接对超级最深层克隆