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

Why it is possible to directly use Interface's method

我正在阅读有关 java 的文章并看到了这段代码:

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

既然Cloneable是一个接口,怎么可能直接访问一个方法呢?

Cloneable是一个很特殊的接口,没有定义任何方法。它只是用来表示这个class可以被克隆。如果你不实现 Cloneable,super.clone() 会抛出一个 CloneNotSupportedException.

super.clone() 不会重定向到 Cloneable 界面 Cloneable 只是声明 该对象应该是 "cloneable"。它 not specifies any methods (see the documentation).

如果你自己不提供超类,超类PersonObjectObject 本身有一个 Object clone() 方法(会引发错误)。

所以这里发生的是它调用超类的clone()。如果您不提供超类(使用 extends),它会调用 Objectclone() 引发 CloneNotSupportedException。否则这里会returnnull

在这种情况下 super.clone() 将抛出 CloneNotSupportedException 因为在 specifications of Object.clone():

The class Object does not itself implement the interface Cloneable, so calling the clone method on an object whose class is Object will result in throwing an exception at run time.

Since Cloneable is an Interface, ...how it is possible to access a method directly ?

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

可克隆接口就是empty