1

次の質問 (Sierra Bates SCJP ガイド) に対する答えはpcpです。

import java.io.*;

class Player {
    Player() { System.out.print("p"); }
}

class CardPlayer extends Player implements Serializable {
    CardPlayer() { System.out.print("c"); }

    public static void main(String[] args) {
        CardPlayer c1 = new CardPlayer();

        try {
            FileOutputStream fos = new FileOutputStream("play.txt");
            ObjectOutputStream os = new ObjectOutputStream(fos);
            os.writeObject(c1);
            os.close();

            FileInputStream fis = new FileInputStream("play.txt");
            ObjectInputStream is = new ObjectInputStream(fis);
            CardPlayer c2 = (CardPlayer) is.readObject();
            is.close();
        } catch (Exception x ) { }
    }
}

したがって、次のように pcp を取得します。

「pc」は、Cardplayer のシリアル化された状態 (継承された p および Cardplayer の c) として出力されます。出力の 3 番目の p は、スーパークラスの Player コンストラクターが実行された結果です (シリアル化できないため、p を出力しています)。

これが答えの導き方ですよね?

4

1 に答える 1

2

答えはイエスです。

SerializableのJavadoc

シリアル化できないクラスのサブタイプをシリアル化できるようにするために、サブタイプは、スーパータイプのパブリック、保護、および(アクセス可能な場合)パッケージフィールドの状態を保存および復元する責任を負う場合があります。サブタイプがこの責任を負うのは、サブタイプが拡張するクラスに、クラスの状態を初期化するためのアクセス可能な引数なしのコンストラクターがある場合のみです。そうでない場合、クラスSerializableを宣言するのはエラーです。エラーは実行時に検出されます

于 2012-11-11T18:15:51.540 に答える