接口的 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()方法?