Java的对象克隆

以往见过的克隆是采用以下这种方式

Employee original=new Employee("John public",50000);

Employee copy=original;

但以上copy与Employee使用的同一个对象,即copy改变时Employee也会发生改变,这种复制叫做浅拷贝。


下面介绍一下深拷贝,引用上面的代码,

但此时使用clone方法实现克隆:

Employee copy=original.clone();

以下是对此方法的检验。


package clone;

import java.util.Date;
import java.util.GregorianCalendar;

public class Employee implements Cloneable {
    private String name;
    private double salary;
    private Date hireDay;

    public Employee(String aname,double asalary){
        this.name=aname;
        this.salary=asalary;
        hireDay=new Date();
    }

    public Employee clone() throws CloneNotSupportedException{
        Employee cloned=(Employee)super.clone();
        cloned.hireDay=(Date)hireDay.clone();
        return cloned;
    }

    public void setHireDay(int year,int month,int day){
        Date newhireDay=new GregorianCalendar(year,month-1,day).getTime();
        hireDay.setTime(newhireDay.getTime());
    }

    public void raiseSalary(double byPercent){
        double raise=salary*byPercent/100;
        salary+=raise;
    }

    public String toString(){
        return "Employee[name="+name+",salary="+salary+",hireday="+hireDay+"]";
    }
}
 
 
package clone;

public class CloneTest {
    public static void main(String[] args){
        try{
            Employee original=new Employee("John Q.Public",50000);
            original.setHireDay(2000,1,1);
            Employee copy=original.clone();
            copy.raiseSalary(10);
            copy.setHireDay(2002,12,31);
            System.out.println("original="+original);
            System.out.println("copy="+copy);
        }
        catch(CloneNotSupportedException e){
            e.printStackTrace();
        }

    }
}


猜你喜欢

转载自blog.csdn.net/Billy1900/article/details/80645539
今日推荐