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