[英]Java interface extends 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.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会发生什么?
谢谢,
Cloneable
接口没有任何方法。
它只是一个标记接口, 基础Object.clone
方法 ( protected
)检查。
如果需要clone
方法,则需要自己声明。
这是因为Cloneable
接口不是普通接口,而是或多或少的标记接口,它确保JVM实现它的类的clone
方法是合法的并且实际上正常工作。
正如文档所述, Cloneable
接口不会声明clone
方法的签名。 该方法本质上是在您从Object
类声明的任何类中继承的,但默认情况下protected
。 这就是为什么你应该通过在你声明的中间接口MyInterface
中public
它来削弱这个约束。
看看Java doc中给出的这个提示:
请注意,此接口不包含克隆方法。 因此,仅仅通过实现该接口的事实来克隆对象是不可能的。 即使反射调用clone方法,也无法保证它会成功。
这只是因为clone()在Object
不公开。 如果你在界面中声明public Object clone()
- 换句话说,如果你的第一个例子就像你的第二个 - 那么你的第一个例子就可以了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.