Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么可以直接使用接口的方法_Java_Interface_Cloneable - Fatal编程技术网

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

Java 为什么可以直接使用接口的方法,java,interface,cloneable,Java,Interface,Cloneable,我在读java时看到了以下代码: public class Person implements Cloneable{ public Object Clone(){ Object obj = null; try{ obj = super.clone(); } catch(CloneNotSupportedException ex){ } return obj; }

我在读java时看到了以下代码:

public class Person implements Cloneable{
    public Object Clone(){
        Object obj = null;
        try{
            obj = super.clone();
        }
        catch(CloneNotSupportedException ex){
        }
        return obj;
    }
}
由于Cloneable是一个接口,如何能够直接访问方法?

Cloneable是一个非常特殊的接口,没有定义任何方法。它仅用于指示可以克隆此类。如果不实现Cloneable,super.clone将抛出CloneNotSupportedException。

Cloneable是一个非常特殊的接口,没有定义任何方法。它仅用于指示可以克隆此类。如果不实现可克隆,super.clone将抛出CloneNotSupportedException。

super.clone不会重定向到可克隆接口。Cloneable简单地说,对象应该是可克隆的。是的

如果您自己不提供超类,Person的超类就是Object。对象本身有一个引发错误的方法

所以这里发生的是,它调用了超类的克隆。如果不提供带有extends的超类,它将调用引发CloneNotSupportedException的对象的克隆。否则它将在这里返回null

在这种情况下,super.clone将因此引发CloneNotSupportedException,因为:

class对象本身并不实现接口Cloneable,因此对类为Object的对象调用clone方法将导致在运行时引发异常

super.clone不会重定向到可克隆接口。Cloneable简单地说,对象应该是可克隆的。是的

如果您自己不提供超类,Person的超类就是Object。对象本身有一个引发错误的方法

所以这里发生的是,它调用了超类的克隆。如果不提供带有extends的超类,它将调用引发CloneNotSupportedException的对象的克隆。否则它将在这里返回null

在这种情况下,super.clone将因此引发CloneNotSupportedException,因为:

class对象本身并不实现接口Cloneable,因此对类为Object的对象调用clone方法将导致在运行时引发异常

既然Cloneable是一个接口,…那么如何能够直接访问一个方法呢

不,你不是;Clonable接口是一个没有方法的接口,您正在调用的方法克隆来自对象类

可关闭的接口只是

既然Cloneable是一个接口,…那么如何能够直接访问一个方法呢

不,你不是;Clonable接口是一个没有方法的接口,您正在调用的方法克隆来自对象类


可克隆接口只是

它不是:它旨在访问对象的克隆方法…仅供参考,可克隆接口是一个标记接口。它不是:它旨在访问对象的克隆方法…仅供参考,cloneable是一个标记接口你能进一步扩展你的答案并告诉我如果一个类没有实现它怎么会引发异常吗?你的意思是java框架如何检查一个类在其Object.clone方法中是否实现了cloneable?@findusl:不。通过implements cloneable,你可以指定自己可以克隆该对象。这取决于你去实施它。但是你指定了一个克隆人会成功的合同。@findusl是的,这就是我想知道的,我的感觉是他们会检查instanceof@SnuKies通常,您可以检查某个东西是否实现了一个带有instanceof的接口。然而,克隆是一种本地方法,由于复制类的所有属性有一些神奇之处,我假设它们使用了一些更特殊的方法。您能进一步扩展您的答案并告诉我,如果一个类没有实现,它怎么会引发异常?您是指java框架如何检查一个类是否在他们的Object.clone方法?@findusl:no。通过实现Cloneable,您可以指定自己可以克隆该对象。这取决于你去实施它。但是你指定了一个克隆人会成功的合同。@findusl是的,这就是我想知道的,我的感觉是他们会检查instanceof@SnuKies通常,您可以检查某个东西是否实现了一个带有instanceof的接口。然而,clone是一个本地方法,因为这里有一些魔法可以复制类的所有属性,所以我假设它们使用更特殊的方法