1.Object类中的clone方法声明为protected,子类只能调用受保护的clone方法来克隆它自己的对象。必须重新定义clone为public才能允许所有方法克隆对象。
2.所有的数组类型都有一个公有的clone方法,而不是受保护的。可以用这个方法建立一个新数组,包含原数组所有元素的副本。
下面是测试用例
package com.fu.demo;
import java.util.Date;
public class myclone {
public static void main(String[] args) throws CloneNotSupportedException {
employee a = new employee("a", 50000,new Date());
a.setHireDay(2000,1,1);
employee copy= (employee) a.clone();
// myclone copy=(myclone) new myclone().clone();
//Object o=new Object();
//Object t=o.clone();
copy.raisesalary(10);
copy.setHireDay(2002,12,31);
System.out.println(a);
System.out.println(copy);
// System.out.println(new employee() instanceof Cloneable);
//System.out.println(copy instanceof Cloneable);
}
}
package com.fu.demo;
import java.util.Date;
import java.util.GregorianCalendar;
public class employee implements Cloneable{
private String name;
private double salary;
private Date hireDay;
public employee() {
}
public employee(String name, double salary, Date hireDay) {
this.name = name;
this.salary = salary;
this.hireDay = hireDay;
}
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 newday=new GregorianCalendar(year,month-1,day).getTime();
hireDay.setTime(newday.getTime());
}
public void raisesalary(double percent){
double r=salary*percent/100;
salary+=r;
}
@Override
public String toString() {
return "employee{" +
"name='" + name + '\'' +
", salary=" + salary +
", hireDay=" + hireDay +
'}';
}
}