這篇文章主要介紹Java序列化中子類、父類構造函數的示例分析,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!
具體如下:
一 介紹
1、如果父類實現了序列化接口,子類就不需要實現序列化接口。
2、創建對象的時候,遞歸調用了父類的構造函數。
3、對子類對象進行反序列化操作時,如果其父類沒有實現序列化接口,那么其父類的構造函數會被調用,否則不會被調用。
二 實例
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(); //創建對象的時候,遞歸調用了父類的構造函數
oos.writeObject(foo1);
oos.flush();
oos.close();
//反序列化是否遞歸調用父類的構造函數,不能證明
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();
/*
* 對子類對象進行反序列化操作時,
* 如果其父類沒有實現序列化接口
* 那么其父類的構造函數會被調用
*/
}
}
/*
* 一個類實現了序列化接口,那么其子類都可以進行序列化
*/
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...");
}
}三 運行結果
foo...
foo1...
foo2...
com.imooc.io.Foo2@913fe2
bar
bar1..
bar2...
bar
bar1..
com.imooc.io.Bar2@eb7859
以上是“Java序列化中子類、父類構造函數的示例分析”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。