Java接口扩展了可克隆性
我不明白为什么我们不能做到以下几点:Java接口扩展了可克隆性,java,cloneable,Java,Cloneable,我不明白为什么我们不能做到以下几点: interface MyInterface extends Cloneable {} class myClazz implements MyInterface { public Object clone() { return null; } } class test{ public static void main(String[]a){ MyInterface o = new myClazz(); o.c
interface MyInterface extends Cloneable {}
class myClazz implements MyInterface {
public Object clone() { return null; }
}
class test{
public static void main(String[]a){
MyInterface o = new myClazz();
o.clone(); // IMPOSSIBLE
}
}
但这很管用
interface Misc{
public void testM();
}
interface MyInterface extends Misc{}
class myClazz implements MyInterface {
public void testM() {}
}
class test{
public static void main(String[]a){
MyInterface o = new myClazz();
o.testM(); // OK
}
}
Cloneable怎么了
谢谢,这只是因为clone()在
对象中不是公共的。如果您在接口中声明public Object clone()
,换句话说,如果您将第一个示例与第二个示例相同,那么第一个示例将起作用。可克隆的接口没有任何方法。
它只是一个标记接口(受保护
)检查
如果您想要一个clone
方法,您需要自己声明它。这是因为Cloneable
接口不是一个正常的接口,而是一个或多或少的标记接口,它向JVM确保实现它的类的clone
方法是合法的,并且实际工作
正如文档所述,Cloneable
接口没有声明clone
方法的签名。该方法在您从对象
类声明的任何类中固有地继承,但默认情况下它受保护
。这就是为什么你应该在你声明的中间接口<代码> MySudio中使它成为<代码>公共< /代码>。
请看Java文档中给出的提示:
请注意,此接口不包含克隆方法。因此,仅仅因为对象实现了该接口,就不可能克隆对象。即使以反射方式调用clone方法,也不能保证它会成功
将Clone()方法添加到MyInterface接口。