【问题标题】:Does child class serialize parent class' members that are not serializable?子类是否序列化父类不可序列化的成员?
【发布时间】:2016-05-22 10:44:51
【问题描述】:

如果 B 类扩展 A 类,B 类实现 Serializable,并且 A 类有一个不可序列化的公共非静态初始化变量...尝试使用 FileOutputStream 的 writeObject() 方法写入类的 B 对象,将序列化来自 A 的不可序列化继承成员,以便将其与 B 类的其余变量一起写入文件中,否则将抛出 NotSerializableException?我试过了,它有效,但我不知道为什么......所以我不确定它是否总是有效,或者我错过了一些东西......谢谢!

【问题讨论】:

    标签: java serialization


    【解决方案1】:

    它将序列化对象B,而不是对象A的属性。所以如果你有类似的类结构

    static class Parent {
        int x = 1;
    }
    static class Child extends Parent implements Serializable {
        int y = 2;
    }
    

    然后新建Child实例,序列化/反序列化

    Child c = new Child();
    c.x = 10;
    c.y = 20;
    // ... serialize/deserialize
    c = (Child) ois.readObject();
    System.out.println(c.x); // prints 1, not 10!
    System.out.println(c.y); // prints 20
    

    【讨论】:

    • 它实际上打印的是 0,而不是 1 或 10。试试吧。
    【解决方案2】:

    没有。为了使子类可序列化,父类也必须可序列化。

    如果父类在您的代码库中,您可以使用 'transient' 关键字从序列化中排除字段

    【讨论】:

    • 如果父类不可序列化,则它不会序列化。否则序列化根本不起作用,因为java.lang.Object 不是可序列化的。答案完全错误。
    • 父类不需要序列化,子类也可以序列化。
    猜你喜欢
    • 2011-12-01
    • 2015-07-20
    • 1970-01-01
    • 2018-11-22
    • 2016-05-07
    • 2016-07-12
    • 2010-12-06
    • 2014-06-07
    相关资源
    最近更新 更多