Java序列化中子類、父類構(gòu)造函數(shù)問題實例分析
本文實例講述了Java序列化中子類、父類構(gòu)造函數(shù)問題。分享給大家供大家參考,具體如下:
一 介紹
1、如果父類實現(xiàn)了序列化接口,子類就不需要實現(xiàn)序列化接口。
2、創(chuàng)建對象的時候,遞歸調(diào)用了父類的構(gòu)造函數(shù)。
3、對子類對象進行反序列化操作時,如果其父類沒有實現(xiàn)序列化接口,那么其父類的構(gòu)造函數(shù)會被調(diào)用,否則不會被調(diào)用。
二 實例
package com.imooc.io;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class ObjectSeriaDemo2 {
public static void main(String[] args) throws Exception{
ObjectOutputStream oos = new ObjectOutputStream(
new FileOutputStream("demo/obj1.dat"));
Foo2 foo1 = new Foo2(); //創(chuàng)建對象的時候,遞歸調(diào)用了父類的構(gòu)造函數(shù)
oos.writeObject(foo1);
oos.flush();
oos.close();
//反序列化是否遞歸調(diào)用父類的構(gòu)造函數(shù),不能證明
ObjectInputStream ois = new ObjectInputStream(
new FileInputStream("demo/obj1.dat"));
Foo2 foo2 = (Foo2)ois.readObject();
System.out.println(foo2);
ois.close();
ObjectOutputStream oos1 = new ObjectOutputStream(
new FileOutputStream("demo/obj1.dat"));
Bar2 bar1 = new Bar2();
oos1.writeObject(bar1);
oos1.flush();
oos1.close();
ObjectInputStream ois1 = new ObjectInputStream(
new FileInputStream("demo/obj1.dat"));
Bar2 bar2 = (Bar2)ois1.readObject();
System.out.println(bar2);
ois1.close();
/*
* 對子類對象進行反序列化操作時,
* 如果其父類沒有實現(xiàn)序列化接口
* 那么其父類的構(gòu)造函數(shù)會被調(diào)用
*/
}
}
/*
* 一個類實現(xiàn)了序列化接口,那么其子類都可以進行序列化
*/
class Foo implements Serializable{
public Foo(){
System.out.println("foo...");
}
}
class Foo1 extends Foo{
public Foo1(){
System.out.println("foo1...");
}
}
class Foo2 extends Foo1{
public Foo2(){
System.out.println("foo2...");
}
}
class Bar{
public Bar(){
System.out.println("bar");
}
}
class Bar1 extends Bar{
public Bar1(){
System.out.println("bar1..");
}
}
class Bar2 extends Bar1 implements Serializable{
public Bar2(){
System.out.println("bar2...");
}
}
三 運行結(jié)果
foo...
foo1...
foo2...
com.imooc.io.Foo2@913fe2
bar
bar1..
bar2...
bar
bar1..
com.imooc.io.Bar2@eb7859
更多java相關內(nèi)容感興趣的讀者可查看本站專題:《Java面向?qū)ο蟪绦蛟O計入門與進階教程》、《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。
相關文章
手寫redis@Cacheable注解?支持過期時間設置方式
這篇文章主要介紹了手寫redis@Cacheable注解?支持過期時間設置方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-01-01
每天練一練Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù)
這篇文章主要介紹了Java函數(shù)與算法Math函數(shù)總結(jié)與字符串轉(zhuǎn)換整數(shù),每天練一練,水平在不知不覺中提高,需要的朋友快過來看看吧2021-08-08
SpringBoot整合Quartz實現(xiàn)定時任務詳解
這篇文章主要介紹了Java?任務調(diào)度框架?Quartz,Quartz是OpenSymphony開源組織在Job?scheduling領域又一個開源項目,完全由Java開發(fā),可以用來執(zhí)行定時任務,類似于java.util.Timer。,下面我們來學習一下關于?Quartz更多的詳細內(nèi)容,需要的朋友可以參考一下2022-08-08
Invalid?bound?statement?(not?found)出現(xiàn)原因以及解決辦法
這篇文章主要給大家介紹了關于Invalid?bound?statement?(not?found)出現(xiàn)原因以及解決辦法的相關資料,文中給出了詳細的解決方法,需要的朋友可以參考下2023-07-07
java實現(xiàn)HttpClient異步請求資源的方法
這篇文章主要介紹了java實現(xiàn)HttpClient異步請求資源的方法,實例分析了java基于http協(xié)議實現(xiàn)異步請求的技巧,具有一定參考借鑒價值,需要的朋友可以參考下2015-07-07

