object类中的clone方法默认是浅拷贝
一个已检验异常(checked exception)
/* Employee.java */
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 n, double s){
name = n;
salary = s;
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+"]";
}
}
/* CloneTest.java */
package clone;
public class CloneTest {
public static void main(String[] args) {
try{
Employee original = new Employee("john", 50000);
original.setHireDay(2000, 1, 1);
Employee copy=original.clone();
copy.raiseSalary(10);
copy.setHireDay(2001, 12, 31);
System.out.println("original=" + original);
System.out.println("copy" + copy);
}
catch (CloneNotSupportedException e) {
// TODO: handle exception
e.printStackTrace();
}
}
}