为什么可以直接使用Interface的方法

时间:2017-04-03 14:55:42

标签: java interface cloneable

我正在阅读关于java的内容并看到了这段代码:

public class Person implements Cloneable{
    public Object Clone(){
        Object obj = null;
        try{
            obj = super.clone();
        }
        catch(CloneNotSupportedException ex){
        }
        return obj;
    }
}

由于Cloneable是一个接口,如何直接访问方法?

3 个答案:

答案 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)

  

由于Cloneable是一个接口,...如何直接访问方法?

不,你不是; Clonable接口是Tag interface(没有方法),你要调用的Clone方法来自Object类......

enter image description here

克隆界面只是empty