clone() 是 Object 的 protected 方法,它不是 public,一个类不显式去重写 clone(),其它类就不能直接去调用该类实例的 clone() 方法。
public class Demo5 {
public static void main(String[] args) throws CloneNotSupportedException {
TestClone testClone = new TestClone();
testClone.clone();
}
}
class TestClone {
private Integer x;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}
// 异常
Exception in thread "main" java.lang.CloneNotSupportedException: com.xxx.demo.TestClone
at java.lang.Object.clone(Native Method)
at com.zsg.demo.TestClone.clone(Demo5.java:21)
at com.zsg.demo.Demo5.main(Demo5.java:11)
应该注意的是,clone() 方法并不是 Cloneable 接口的方法,而是 Object 的一个 protected 方法。Cloneable 接口只是规定,如果一个类没有实现 Cloneable 接口又调用了 clone() 方法,就会抛出 CloneNotSupportedException。
public class Demo5 {
public static void main(String[] args) throws CloneNotSupportedException {
TestClone testClone = new TestClone();
testClone.clone();
}
}
class TestClone implements Cloneable{
private Integer x;
@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}