子类是否序列化不可序列化的父类成员?

时间:2016-02-11 15:13:40

标签: java serialization

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:-1)

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

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