9.Java核心技术—对象克隆

       当我们拷贝一个变量的时候,原始变量和拷贝的变量将引用同一个对象,此时改变一个变量引用的对象,另一个变量也会受到影响。这个即时我们紧紧进过拷贝(复制)的结果。如:Employee e=new Employee("Arm",2012-10-10); Employee copy=e;

       如果我们希望拷贝的变量最初状态跟原始状态一样,但是当改变其中一个变量引用的对象时,不会影响另外一个变量,这个时候我们可以通过调用clone()方法来得到这样的一个新拷贝,即克隆。

       当我们对对象e进行克隆的时候,那么Employee必须要实现Cloneable接口(无任何方法,只是一个标记接口),并且要重写Object类中的clone()方法,这个方法还要抛出cloneNotSupportedException异常。

       如果我们重写的clone方法是这样的如下:

        public Employee clone() throw ....{return super.clone();},那么我们克隆的只是浅克隆。

      浅克隆就是指:原始对象和克隆对象的地址是一样的,但是它们的子对象的地址还是一样的。如果它们的子对象是不可改变的,那么浅克隆没有问题,如果子对象是可以改变的,那么浅克隆就会有影响。此时我们就要修改cone方法,进行深克隆。

     深克隆就是原始对象和克隆对象的地址不一样,同时子对象的地址也不一样,即子对象也克隆了。

    修改后的clone方法: public Employee clone() ....{

                                       Employee cloned=(Employee)super.clone();

                                       cloned.hireDay=(Date)hireDay.clone();

                                       return coned;

                                }

posted on 2012-04-27 15:45  ssy黑桃a  阅读(200)  评论(0编辑  收藏  举报