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。输出中的第三个 p 是超类 Player 构造函数运行的结果——因为它不可序列化——打印 p。

答案是这样得出的,不是吗?

4

1 回答 1

2

答案是肯定的。

可序列化的 Java 文档

为了允许序列化不可序列化类的子类型,子类型可以负责保存和恢复超类型的公共、受保护和(如果可访问)包字段的状态。仅当它扩展的类具有可访问的无参数构造函数来初始化类的 state时,子类型才可以承担此责任。如果不是这种情况,则声明类 Serializable 是错误的。将在运行时检测到错误

于 2012-11-11T18:15:51.540 回答