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