JavaDoc文档描述
类可以通过继承序列化接口拥有序列化的能力.所有可序列化类的子类都是可序列化的.序列化接口没有任何方法和字段,只是通过语义识别是否被序列化.
如果要让一个子类child能够序列化,但是它的父类没有实现序列化.那么父类需要一个无参数的构造函数并且这个构造函数可以被子类访问到.如果父类的构造参数不符合这个规则,那么在编译时会报错.
在反序列过程中,没有序列化的字段将会被初始化通过public,protect的无参构造函数方法初始化.可序列化子类必须可以访问父类的无参构造函数.可序列化的子类的字段将会从流中回复.
序列化类强烈建议显示声明serialVersionUID,因为不显示声明,jvm会通过类的信息来实现serialVersionUID,但是对于类的信息有较强的敏感性可能编译器的实现千差万别.serialVersionUID最好使用private 修饰,子类继承没有用处.数组不能声明一个明确的serialVersionUID,但是数组的没有匹配serialVersionUID值的要求.
代码实现
父类:
public class lee {
private lee(){
}
}
子类:
public class child extends lee implements Serializable {
}
此时ide在子类代码上会报错,如果父类的构造参数修改为protect就可行了. 因为序列化实现了对象的深复制,子类的实例化需要父类先实例化.