我正在阅读关于java的内容并看到了这段代码:
public class Person implements Cloneable{
public Object Clone(){
Object obj = null;
try{
obj = super.clone();
}
catch(CloneNotSupportedException ex){
}
return obj;
}
}
由于Cloneable
是一个接口,如何直接访问方法?
答案 0 :(得分:4)
super.clone()
不会重定向到Cloneable
界面。 Cloneable
只是声明该对象应该是“可复制的”。它确实not specifies any methods (see the documentation)。
如果您没有自己提供超类,Person
的超类是Object
。 Object
本身有Object clone()
方法(会引发错误)。
所以这里发生的是它调用超类的clone()
。如果您未提供超类(使用extends
),则会调用引发clone()
的{{1}} Object
。否则它将在此处返回CloneNotSupportedException
。
在这种情况下,null
因此会在specifications of Object.clone()
中抛出super.clone()
:
类
CloneNotSupportedException
执行本身并不实现接口Object
,因此在类Cloneable
的对象上调用clone
方法将导致在运行时抛出异常。
答案 1 :(得分:2)
Cloneable
是一个非常特殊的接口,没有定义任何方法。它仅用于表示可以克隆此类。如果您不实施Cloneable,则super.clone()
会抛出CloneNotSupportedException
。
答案 2 :(得分:2)
不,你不是; Clonable接口是Tag interface(没有方法),你要调用的Clone方法来自Object类......由于Cloneable是一个接口,...如何直接访问方法?
克隆界面只是empty