1. El método de clonación en la clase Object se declara como protegido, y la subclase solo puede llamar al método de clonación protegida para clonar su propio objeto. Debe redefinir clonar como público para permitir que todos los métodos clonen objetos.
2. Todos los tipos de matrices tienen un método de clonación público, no protegido. Puede utilizar este método para crear una nueva matriz que contenga una copia de todos los elementos de la matriz original.
A continuación se muestra el caso de prueba
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 +
'}';
}
}