当前位置: 首页 > 知识库问答 >
问题:

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

何楷
2023-03-14

如果类B扩展了类A,则类B实现可序列化,而类A有一个不可序列化的公共非静态初始化变量。。。尝试使用FileOutputStream的writeObject()方法写入类“B”对象时,将序列化从a继承的不可序列化成员,以便将其与类B的其余变量一起写入文件,还是将引发NotSerializableException?我试过了,效果不错,但我不知道为什么。。。所以我不确定它是否总是有效,或者我错过了什么。。。谢谢

共有2个答案

西门经国
2023-03-14

不可以。为了使子类可以序列化,父类也必须可以序列化。

如果父类位于代码库中,则可以使用“transient”关键字将字段从序列化中排除

羊舌迪
2023-03-14

它将序列化对象B,但不会序列化对象A的属性。如果你有这样的班级结构

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

然后创建新的子实例,序列化/反序列化

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
 类似资料:
  • 问题内容: 我在android / java中对Location的子类进行序列化遇到了麻烦 位置不可序列化。我有一个名为FALocation的第一个子类,它没有任何实例变量。我已经宣布它可序列化。 然后,我有一个名为Waypoint的第二个类,看起来像这样: 序列化工作正常。 反序列化会产生跟随翼异常(腿对象包含一个航路点): 问题答案: 序列化位置绝对必要吗?也许您可以将其标记为瞬态,并在反序列

  • 问题内容: 如下代码: 引发以下异常: 我猜内部类具有一个允许对其私有访问的字段和方法的字段。声明内部类static 可以解决它,但是如果需要此访问权限怎么办?有没有一种方法可以在不包含封闭类的情况下序列化非静态内部类,例如通过引用外部类? 编辑:例如,仅在序列化之前才需要访问外部类。好的,编译器不知道这一点,但是我认为这就是关键字存在的原因。 问题答案: 如果InnerClass需要此访问权限怎

  • 在下面的示例中,我有一个主类-A和它的子类-B。两者都可以用作一般类X中的属性。 如何使用Jackson多态特性将以下给定的json正确反序列化为各自的类: JSON A: JSON B: 预期结果:将keys对象映射到JSON A的类A和JSON B的类B。 请提出其他建议。

  • 问题内容: 我继承了一个Websphere Portal项目,该项目使用Hibernate 3.0连接到SQL Server数据库。 这个项目中大约有130个Hibernate表类。它们都实现了可序列化。它们均未声明serialVersionUID字段,因此Eclipse IDE对所有这些类均显示警告。 这些类是否真正需要实现Serializable? 如果是这样,是否有任何工具可以一次将生成的s

  • 我有一个没有扩展可串行化或可外部化接口的类,但在netbeans中使用FindBugs时仍然会遇到错误。有人能告诉我如何解决这个问题吗? 这是我的课 FindBug中的Bug:类分析器定义了一个非瞬时的非序列化实例字段objAnalyzerVar,对于objAnalyzerDataTypeInfo也是如此;

  • 我有一门课是这样的: 但是当我试图序列化它时,我收到一个错误,上面写着“试图序列化java.lang.class:java.lang.字符串。忘记注册一个类型适配器了吗?”。所以我创建了这个适配器: } 并登记如下: 但我还是犯了同样的错误<我做错了什么 适配器的实现看起来正常吗?