0

たとえば、Cloneable を実装するクラス XXX を作成し、クラス XXX でメソッド clone をオーバーライドすると、メソッドで super.clone を呼び出す必要がありますか?

4

4 に答える 4

3

いくつかの重要な指針

  1. Cloneable はマーカー インターフェイスです。マーカー インターフェイスには、メソッドまたは変数が宣言されていません。このクラスには、たとえばクローン可能、シリアライズ可能などの機能があることを JVM に伝えるだけです。
  2. super.clone と言っている場合、cloneable からメソッドを呼び出しているのではなく、実際にはスーパー クラスの clone() メソッドを呼び出しているか、デフォルトで Object.clone(); を呼び出しています。

独自の実装が必要ない場合は、Object の clone メソッドを使用できますが、これにより、オブジェクトの浅いコピーが作成されます。それ以上のことをしたい場合は、独自の実装を提供することをお勧めします。

元の質問に関しては、コードがすべてを処理していることがわかっている場合、スーパーメソッドを呼び出すことは強制ではありません。ただし、スーパー クラス (この場合は Object クラス) の機能を使用する必要がある場合は、スーパー メソッドを呼び出す必要があります。

于 2012-08-07T05:58:14.053 に答える
1

はい。スーパー クラスの実装を呼び出さない場合、必要なデータは新しいクローンにコピーされません。

更新 たとえば、スーパークラスは、そのプライベート変数を新しいクローンにコピーしたい場合があります。

実際の実装は

XXX clone =    super.clone();

// 'clone' now has all the data the super class wants to know.
// add any details from your XXX class to it here.

return clone;
于 2012-08-07T05:48:28.417 に答える
0

場合we override the method clone in the class XXX-スーパーへの呼び出しは必要ありません。あなたはただあなたが望むことをそこで行います。-何をどのようにコピーしたいかをコピーすることを意味します。

于 2012-08-07T05:50:43.407 に答える
0

*編集 OK 私は間違っていました ここで super.clone() が呼び出すものです:

http://docs.oracle.com/javase/7/docs/api/java/lang/Object.html#clone%28%29

super.clone() を呼び出す必要があります

于 2012-08-07T05:48:37.827 に答える