Java规范中的java.lang.Cloneable接口定义了任何扩展它的对象也实现了沉睡在java.lang.Object内部的clone()方法。具体来说,它表示:
一个类实现Cloneable接口,以向java.lang.Object#clone()方法表明该方法可以合法地对该类的实例进行逐字段复制。
对我来说,这意味着应该假设每个扩展Cloneable的类都有一个public Object clone()方法。这使得以下方法容易被认为是有效的:
然而,实际情况并非如此,
这意味着
为什么我们不能假设实现了
一个类实现Cloneable接口,以向java.lang.Object#clone()方法表明该方法可以合法地对该类的实例进行逐字段复制。
对我来说,这意味着应该假设每个扩展Cloneable的类都有一个public Object clone()方法。这使得以下方法容易被认为是有效的:
public static makeACloneFrom(Cloneable c)
{
return c.clone();
}
然而,实际情况并非如此,
Cloneable
源代码(不包括javadoc)的全部内容只是:package java.lang;
public interface Cloneable {
}
这意味着
Cloneable#clone()
不存在(尝试编译上述示例方法会引发编译时错误,类似于 "cannot find symbol: method clone()
")。那么,Cloneable
的源代码中不应包含类似于 public Cloneable clone();
的内容吗?为什么我们不能假设实现了
Cloneable
接口的类具有 public Cloneable clone()
方法?