JavaのCloneableインターフェースはどのように呼び出されるのですか?

Javaでは、Cloneable インターフェースはメソッドを持たないマーカーインターフェースです。Cloneable インターフェースを使用するには、複製するクラスでインターフェースを実装するだけで済みます。

Cloneableインタフェースを実装し、クローンを作成するためのサンプルコードを以下に示します。

public class MyClass implements Cloneable {
private int data;
public MyClass(int data) {
this.data = data;
}
public int getData() {
return data;
}
public void setData(int data) {
this.data = data;
}
@Override
public Object clone() throws CloneNotSupportedException {
return super.clone();
}
public static void main(String[] args) {
MyClass original = new MyClass(10);
try {
MyClass cloned = (MyClass) original.clone();
cloned.setData(20);
System.out.println("Original data: " + original.getData());
System.out.println("Cloned data: " + cloned.getData());
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
}
}

このサンプルでは、MyClassがCloneableインターフェイスを実装し、clone()メソッドをオーバーライドしています。main()メソッドで、まずオリジナルのオブジェクトoriginalを作成し、次にclone()メソッドを呼び出してクローンオブジェクトclonedを作成します。また、クローンオブジェクトのデータを変更しても、オリジナルのオブジェクトには影響しません。最後に、オリジナルのオブジェクトとクローンオブジェクトのデータをアウトプットすると、それぞれ10と20です。

Cloneableインターフェースの実装は自動的にオブジェクトのディープコピーを行わず、シャローコピーのみを行います。ディープコピーを実装するには、clone()メソッド内でオブジェクト内の参照型をさらに処理する必要があります。

bannerAds