Cloneableインタフェース

Cloneableインタフェース

インスタンスの複製に対応していることを表明するためのンターフェース(マーカーインタフェース)。インタフェース実装後にclone()メソッドをオーバーライドすることでインスタンスの複製clone()メソッドが使用可能になる。

オーバーライドの注意

clone()メソッドはObjectクラスにprotectedで宣言されているため、publicでオーバーライドして外部から呼び出せるようにする。

深いコピーと浅いコピーとは

インスタンスの複製処理には深いコピーとよばれるものと浅いコピーと呼ばれるものがある。

深いコピーとは

複製元のインスタンス中のフィールドに含まれるインスタンスもcloneを利用して複製しているもの。

深いコピーの例

import java.util.Date;

public class Book  implements Cloneable {//clone()メソッド実装の宣言
    private String title;
    private Date publishDate;
    private String commnet;
    
    public Book clone() {
    	Book book = new Book();
    	book.title = this.title;
    	book.commnet = this.commnet;
    	//フィールドにもclone()メソッドを利用している深いコピー
    	book.publishDate = (Date)this.publishDate.clone();
    	return book;
    }
}

浅いコピーとは

複製元のインスタンス中のフィールドを代入演算子を利用してコピーしているもの

浅いコピーの例

import java.util.Date;

public class Book  implements Cloneable {//clone()メソッド実装の宣言
    private String title;
    private Date publishDate;
    private String commnet;

    public Book clone() {
    	Book book = new Book();
    	book.title = this.title;
    	book.commnet = this.commnet;
    	//代入演算子を利用した浅いコピー
    	book.publishDate = this.publishDate;
    	return book;
    }
}

LEAVE A REPLY

*
*
* (公開されません)