温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java超类是否可序列化

发布时间:2026-10-11 04:35:27 来源:亿速云 阅读:90 作者:小樊 栏目:编程语言

在 Java 中,“超类是否可序列化”取决于该超类本身是否实现了 java.io.Serializable 接口,而不是由子类决定的。

核心规则

  1. 如果超类实现了 Serializable

    • 子类自动“可序列化”(即使子类没有显式实现 Serializable)
    • 超类和子类的字段都会参与序列化
  2. 如果超类没有实现 Serializable

    • 子类即使实现了 Serializable,超类部分不会序列化
    • JVM 在反序列化时:
      • 会调用超类的无参构造器来初始化超类字段
      • 因此:超类必须有无参构造器,否则反序列化会失败(InvalidClassException)

示例

超类可序列化

class Parent implements Serializable {
    int a;
}

class Child extends Parent implements Serializable {
    int b;
}

✅ Child 对象可完整序列化(包括 a 和 b)


超类不可序列化

class Parent {
    int a;
    Parent() {} // 必须有无参构造器
}

class Child extends Parent implements Serializable {
    int b;
}

✅ Child 可序列化
⚠️ 但 a 不会被序列化,反序列化时通过 Parent() 恢复默认值


特殊情况

  • 若超类不可序列化且没有无参构造器:
    • 子类实现 Serializable 会编译通过
    • 但运行时反序列化会抛异常

总结

Java 超类本身可以序列化,也可以不序列化;是否可序列化只看它是否实现 Serializable。

如果你愿意,我可以补充:

  • transient 在继承中的行为
  • writeObject/readObject 与超类字段
  • 真实框架(如 Spring / JPA)中的注意事项
向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手