0

クローン可能なインターフェースと深くオーバーライドされたクローンメソッドを持つスーパークラス A があるとしましょう。

サブクラスBもあります。

B Temp = new B();
B Temp_Clone = (B) Temp.clone();

メソッド Temp.clone() は、複製されたスーパークラス A への参照を返しますよね?

私の理解では、スーパークラスへの参照をサブクラスオブジェクトに入れることはできませんよね?

では、私がここに書いたコードはどのようにして可能になるのでしょうか? キャスティングのせい?

ありがとう。

4

3 に答える 3

0

クラス Object の clone() メソッドは、同じクラスを持ち、すべてのフィールドが同じ値を持つオブジェクトのコピーを作成して返します。ただし、Object.clone() は、オブジェクトがマーカー インターフェイス Cloneable を実装するクラスのインスタンスでない限り、CloneNotSupportedException をスローします。

于 2013-04-06T09:12:35.537 に答える
0

メソッド Temp.clone() は、複製されたスーパークラス A への参照を返しますよね?

右。

私の理解では、スーパークラスへの参照をサブクラスオブジェクトに入れることはできませんよね?

違う。

では、私がここに書いたコードはどのようにして可能になるのでしょうか? キャスティングのせい?

あなたがそれについて何が不可能だと思うかはわかりませんが、キャスティングは確かに必要です。

于 2013-04-06T09:39:28.507 に答える
-1

A のコードが super.clone を呼び出した場合、Temp.clone を呼び出すときに作成されるオブジェクトはタイプ B のオブジェクトです。clone はコンストラクターを呼び出さないためです。ネイティブ クラスとしてオブジェクト クラスに実装された clone メソッドとプリフォーム メンバーごとにコピーし、このオブジェクトと同じオブジェクトを作成します。ClonedTemp は B タイプからのものです。

于 2013-04-06T10:13:54.223 に答える