1、clone()方法
如果类中实现Cloneable接口,则该方法返回对象实例的副本。Cloneable是标记接口,即该接口并不定义任何方法,而是用于表示类的实例具有某个属性。本例中,该接口表示允许创建类实例的克隆。下面这段代码检查了对象unknown是否实现Cloneable接口,并显示消息来表示检查结果:
Object unknown = getAnObject();
if (unknown instanceof Cloneable) {
System.out.println("I can create a clone of this object");
} else{
System.out.println("I can't create a clone of this object");
}
Object类中定义的默认clone()实现方法生成对象的浅复制。浅复制是对象复制,该复制引用的对象与园对象所引用的对象一致。例如,假定之前定义的Employee类实现Cloneable接口:
public class Employee implements Cloneable{
public int employeeID;
public String firstName;
public String lastName;
}
再假设创建并初始化了Employee类的实例,然后调用clone()方法生成其他副本。注意到。由于Object类中的clone()实现是protected,因此必须从子类或同一包中的类来调用该方法,否则还需要将该方法重写为public。
Employee original = new Employee();
original.employeeID = 123456;
original.firstName = "John";
original.lastName = "Smith";
Employee myClone =(Employee)(original.clone());
这段代码中创建了Employee实例的一个浅复制,并将指向该复制的引用保存到myClone中。由于这是浅复制,因此克隆中的对象引用仍然指向相同的对象,也就是原对象中引用的对象,而不是这些对象的副本。