父类实现Serializable接口时,其字段随子类自动序列化;未实现时,父类字段不被保存,反序列化需通过无参构造函数重建,且必须手动处理字段读写。

Java对象序列化时,父类字段的处理方式取决于父类是否实现了Serializable接口。序列化机制会根据这一条件决定如何处理继承层次中的字段。
如果父类也实现了Serializable接口,那么整个对象的字段(包括父类和子类)都会自动被序列化机制处理。
这种情况下,所有字段都遵循默认的序列化流程:
transient和非static字段会被自动序列化如果父类没有实现Serializable接口,序列化行为会发生变化,这是开发中容易出错的地方。
立即学习“Java免费学习笔记(深入)”;
此时,子类可以正常序列化自己的字段,但父类字段不会被自动保存。反序列化时,这些字段将使用父类无参构造函数重新初始化。
关键点:
InvalidClassException
在父类未实现Serializable的情况下,可以通过以下方式精确控制字段处理:
writeObject和readObject方法手动处理父类字段readObject中显式调用父类逻辑来恢复状态ObjectInputStream.defaultReadObject()和ObjectOutputStream.defaultWriteObject()配合自定义逻辑例如,当需要保留非Serializable父类的字段值时,可以在子类中:
private void writeObject(ObjectOutputStream out) throws IOException { out.defaultWriteObject(); out.writeInt(parentField); // 手动写入父类字段 } private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { in.defaultReadObject(); parentField = in.readInt(); // 手动恢复父类字段 }基本上就这些。核心是看父类是否可序列化,决定了字段是自动处理还是需要手动干预。
以上就是Java对象序列化时父类字段如何处理的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号