接口的 Java 规范java.lang.Cloneable
将其自身定义为表示扩展它的任何对象也实现了clone()
在java.lang.Object
. 具体来说,它说:
一个类实现该
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()
方法?