JavaDoc文檔描述
類可以通過繼承序列化接口擁有序列化的能力.所有可序列化類的子類都是可序列化的.序列化接口沒有任何方法和字段,只是通過語義識別是否被序列化.
如果要讓一個子類child能夠序列化,但是它的父類沒有實(shí)現(xiàn)序列化.那么父類需要一個無參數(shù)的構(gòu)造函數(shù)并且這個構(gòu)造函數(shù)可以被子類訪問到.如果父類的構(gòu)造參數(shù)不符合這個規(guī)則,那么在編譯時會報錯.
在反序列過程中,沒有序列化的字段將會被初始化通過public,protect的無參構(gòu)造函數(shù)方法初始化.可序列化子類必須可以訪問父類的無參構(gòu)造函數(shù).可序列化的子類的字段將會從流中回復(fù).
序列化類強(qiáng)烈建議顯示聲明serialVersionUID,因?yàn)椴伙@示聲明,jvm會通過類的信息來實(shí)現(xiàn)serialVersionUID,但是對于類的信息有較強(qiáng)的敏感性可能編譯器的實(shí)現(xiàn)千差萬別.serialVersionUID最好使用private 修飾,子類繼承沒有用處.數(shù)組不能聲明一個明確的serialVersionUID,但是數(shù)組的沒有匹配serialVersionUID值的要求.
代碼實(shí)現(xiàn)
父類:
public class lee {
private lee(){
}
}
子類:
public class child extends lee implements Serializable {
}
此時ide在子類代碼上會報錯,如果父類的構(gòu)造參數(shù)修改為protect就可行了. 因?yàn)樾蛄谢瘜?shí)現(xiàn)了對象的深復(fù)制,子類的實(shí)例化需要父類先實(shí)例化.