インターフェースの 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ソースコード全体 (sans javadoc) は単に
package java.lang;
public interface Cloneable {
}
つまり、それCloneable#clone()は存在しません (そして、上記のサンプル メソッドをコンパイルしようとすると、" " のようなコンパイル時エラーがスローされますcannot find symbol: method clone())。のソース コードにCloneableは、 の影響を受ける何かが含まれているべきではありませんpublic Cloneable clone();か?
Cloneableを実装するクラスがメソッドを持っていると想定できないのはなぜpublic Cloneable clone()ですか?