扩展实现 Serialized 的类

Mar*_*ars 7 java serialization extends serializable implements

如果我扩展一个实现 Serialized 的类,我是否需要该类也实现 Serializable?

例如,如果我有,

public class classToBeExtended implements Serializable
Run Code Online (Sandbox Code Playgroud)

那么这样就够了吗?

public class classThatWillExtend extends classToExtended
Run Code Online (Sandbox Code Playgroud)

或者我需要这样做吗?

public class classThatWillExtend extends classToExtended implements Serializable
Run Code Online (Sandbox Code Playgroud)

Joh*_*ger 6

如果一个类的任何超类实现了给定的接口,那么子类也实现了该接口。 Serializable在这方面并不特殊,所以不,类的子类Serializable不需要显式声明它们实现Serializable. 他们可以这样声明,但这样做并没有什么区别。

另一个含义是,如果扩展一个Serializable类,则应该确保子类本身确实是可序列化的。例如,不要添加transient不可序列化类型的非字段,除非您还准备添加必要的方法来支持它们。


tso*_*akp 3

根据Javadoc

可序列化类的所有子类型本身都是可序列化的

  • 这有点误导:实现“可序列化”的类的所有子类型也实现“可序列化”;这并没有说明任何一个是否实际上可以被序列化。 (2认同)
  • 实现“可序列化”是可序列化的必要条件,但不是充分条件。您可以将不可序列化类型的字段添加到实现“可序列化”的类中,如果这些字段为非空(并且引用的运行时类型不可序列化),则序列化将失败。 (2认同)