Java中如果clone为什么必须实现Cloneable接口

时间:2024-05-30 19:52:54

Java中如果clone为什么必须实现Cloneable接口

Obje类中有clone方法
Java中如果clone为什么必须实现Cloneable接口

对应的描述
Java中如果clone为什么必须实现Cloneable接口
个人理解:如果Object的子类没有实现Cloneable接口,但是子类重写(override)了clone方法,子类就会抛出异常。

对应的中文api文档
Java中如果clone为什么必须实现Cloneable接口

也就是说,每个类都是Object的子类,Object类中有个clone()方法(人家定义如果你要重写clone方法,但是你没有实现cloneable接口,就是没写class A implements cloneable)那就会抛出个异常。如果你写了,就不会抛出异常。

就像是a/0;会抛出异常,现在定义你重写clone方法但是你没写class A implements cloneable,它会抛出异常。写了就不会

例如:写了implements Cloneable,不抛出异常
Java中如果clone为什么必须实现Cloneable接口

Java中如果clone为什么必须实现Cloneable接口

没写,就会抛出异常,通过catch来捕捉。如果没捕捉,就会报错

Java中如果clone为什么必须实现Cloneable接口
Java中如果clone为什么必须实现Cloneable接口

没写implements Cloneable,但是重写了clone方法,抛出异常,没捕捉,程序就会报错
Java中如果clone为什么必须实现Cloneable接口

Java中如果clone为什么必须实现Cloneable接口
再次加上,就不报错:
Java中如果clone为什么必须实现Cloneable接口

Java中如果clone为什么必须实现Cloneable接口

最后:重写clone方法要写上implements Cloneable,就不会报错,没写就会报错,至于至于这个Cloneable接口,其实里面什么有也没有,这也就是为啥好多地方说这是个标志接口,没作用。但是你没写implements Cloneable,重写clone就会报错

Java中如果clone为什么必须实现Cloneable接口

空荡荡的接口,里面啥也没有,所以说起标记作用。