アクセサに変更1.なぜオブジェクトのクローンが保護されていますか?
まず第一に、保護された役割は、それ自体を作ることで、メソッドは、サブクラス呼び出すことができます。以下に示すように、深いコピーのクローンオブジェクトは、クラスが他のクラスが含まれてコピーされた場合、また、深いコピーでなければなりません
クラス人{ int型の給与。 文字列の名前。 日付生年月日; }
クローン機能は、我々はオブジェクトを呼び出したときにしかし、それはこの関数はオブジェクトクラスと呼ばれていることを保証しなければならなかったことだけ浅いコピーが含まれているオブジェクトクラスのディープコピーです。この時点で、唯一の属性タイプと基本クラスオブジェクトを含む場合、Bの値に影響を及ぼさないの値を変更する、いくつかの(例えば、整数、文字列として)変更することはできません。
クラス人{ int型の給与。 文字列の名前。 日付生年月日; パブリック 静的 ボイドメイン(文字列[]引数){ 人物A = 新たな人(12、 "A"、新しい日付())。 人物B = a.clone()。 } }
私たちはの誕生日で値を変更した場合しかし、誕生日のBは明らかにクローンの本来の意図に反している、変化します。その後、我々は外部クラスにアクセスするために、パブリックに変更クローン、およびアクセス修飾子を書き換える必要があります。だからここに2番目の質問を発生します。
2.なぜオブジェクトcloneメソッドのインタフェースCloneableをcloneメソッドを実装する代わりに書き換える必要があります
実際には、答えは外部のクラスがcloneメソッドにアクセスすることができます可能にするために、我々はアクセス修飾子をパブリックに変更する必要があり、上記与えられています。親クラスがそのアクセス修飾子を書き換えていることは、親がアクセス修飾子の大きさの範囲を持っているよりも多くのことができない場合は、それは現実的ではありません。
文の要約:外の世界へのアクセスを達成するために、深いコピーcloneメソッドを保証することができ、我々は、オブジェクトのクローン保護を設定し、インターフェイスを作成しますCloneableを