0

在寻找 OCJP 问题时,我看到了一个问题(在这里问题 5):
'''序列化具有不实现 java.io.Serialazable 的超类型的类型的对象是合法的。'''<br />答案说它是正确的,但是我怎样才能序列化不实现'''Serializable'''类的类的对象?我们不能说它是完全非法的,因为类可能直接实现'''java.io.Serializable''',这不是很奇怪吗?

4

1 回答 1

-1

如果超类不是可序列化的,那么子类仍然可以序列化:即使超类没有实现 Serializable 接口,如果子类本身实现了 Serializable 接口,我们也可以序列化子类对象。所以我们可以说要序列化子类对象,超类不需要是可序列化的。但是在这种情况下,在序列化过程中超类的实例会发生什么 -

序列化:在序列化时,如果任何实例变量继承自不可序列化的超类,则 JVM 会忽略该实例变量的原始值并将默认值保存到文件中。

反序列化:在反序列化时,如果存在任何不可序列化的超类,则 JVM 将在超类中执行实例控制流。要在类中执行实例控制流,JVM 将始终调用该类的默认(无参数)构造函数。所以每个不可序列化的超类都必须包含默认构造函数,否则我们会得到运行时异常。

于 2020-10-07T14:36:00.953 回答