クローン()メソッドのオブジェクトが保護され、浅いコピーがあり、唯一実現するために、それを上書きするcloneメソッドを使用したいのCloneableを実装し、それ以外の場合は、例外CloneNotSupportedExceptionがスローされます、このメソッドを呼び出すことができます。
@Override パブリックオブジェクトクローン(){ オブジェクトO = NULL ; 試み{ O = スーパー.clone(); } キャッチ(CloneNotSupportedException E){ e.printStackTrace(); } // 人P =(人物)O; // P .book =(書籍)p.getBook()クローン();. // これら二つはの深いコピーを使用することで解除 リターンO; }
我々は、一般的に3通りの方法で使用されるオブジェクトをコピーする必要がある場合
パブリック静的無効メイン(文字列[] args){
書籍B =新しいブック(「ジャワ」)。
人物P =新しい人物( "WT"、B)。
人物P1 =新しい人(P);
人物P2 =(人物)p.clone();
b.setBookName( "JS")。
p.setName( "zjj");
System.out.println( "P" + P)。
System.out.println( "P1:" +のP1)。
System.out.println( "P2:" + p2の);
}
浅いコピークローン(すなわち2つの段落を解放せず)を使用する場合、オブジェクトのコピーのみがオブジェクト参照オブジェクトのコピーが含まれていません。
P:{名:ZJJ、書籍:bookName {:}} JS P1の:{名:重量、書籍:{bookName:JS}} // P1またはP2のいずれかで、値は、値の基本的なタイプのダイレクトコピーが、基準となりますオブジェクトタイプは、アドレスのコピーである P2:{名:重量、書籍:{bookName:JS}} // Pの元の値へのオブジェクト参照が変更されると、ターゲットは浅いコピーを変更することになるように
ディープコピークローンを使用する場合(すなわち、その二つのセグメントを解放します)。
P2:{名:重量、書籍:{bookName:ジャワ}} //場合ディープコピーもオブジェクト内のオブジェクトの値のコピーであり、基準オブジェクトの変更の元の値が影響を及ぼさないであろう