5
public class Color {
 String color;
 Color(String color)
 {
   this.color=color;         
 }
 }


public class ColoredCircle {
int x;
Color color;
ColoredCircle(int x, Color color)
{
    this.x=x;
    this.color=color;
}
public Object testClone()
{
    Color c = new Color(this.color.color);
    ColoredCircle cc1 = new ColoredCircle(this.x, c);
    return cc1;
}
}

上記の ColoredCircle クラスには、testClone() という名前のメソッドがあり、Deep Cloning とまったく同じように機能します。今、クローンを作成するために Cloneable を実装する必要があるという事実について混乱していますか? また、上記のプログラムは一種の Deep cloning ですか?

4

3 に答える 3

1

cloneCloneableに実装する必要はありますか?はい。clone() メソッドは、次の Javadoc 説明で保護されたアクセス修飾子を持っています:-

このメソッドは、このオブジェクトのクラスの新しいインスタンスを作成し、そのすべてのフィールドを、割り当てによるかのように、このオブジェクトの対応するフィールドの内容で正確に初期化します。フィールドの内容自体は複製されません。したがって、このメソッドは操作shallow copyではなく、このオブジェクトの を実行しdeep copyます。

あなたのメソッドtestCloneはクローン動作では正しいかもしれませんが、それ自体はクローン可能オブジェクトではありません.クローン可能オブジェクトはインターフェイスを実装する必要があり、できればクラス外で使用できるようにCloneableパブリックアクセスを持っている必要があります.clone()

あなたのクラスを読んでいる人は、testClone()メソッドの重要性を理解するのに苦労するでしょう。

于 2015-10-14T13:51:26.110 に答える