在 Java 中,clone
方法实际上是定义在 Object
类中的,而不是 Cloneable
接口。
Object
类
Object
类是 Java 所有类的父类,它包含一个受保护的 clone
方法。这个方法用于创建并返回对象的一个副本。然而,要使得一个类的实例可以被克隆,该类必须实现 Cloneable
接口,否则会抛出 CloneNotSupportedException
异常。
Cloneable
接口
Cloneable
接口是一个标记接口(即它没有包含任何方法)。实现 Cloneable
接口只是一个指示,表明类的实例可以通过 clone
方法进行克隆。如果一个类实现了 Cloneable
接口,并且你调用其 clone
方法,Object
类中的 clone
方法才会正常工作。
代码示例
public class MyClass implements Cloneable {
private int value;
public MyClass(int value) {
this.value = value;
}
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
try {
MyClass obj1 = new MyClass(42);
MyClass obj2 (MyClass) obj1.clone();
System.out.println(obj2.value);
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}
在这个例子中,MyClass
实现了 Cloneable
接口,并重写了 clone
方法。在 main
方法中,我们创建了 obj1
的一个副本 obj2
。
总结
clone
方法定义在Object
类中。- 实现
Cloneable
接口是为了表明该类的实例可以被克隆,从而避免CloneNotSupportedException
异常。