Java序列化中子类、父类构造函数问题实例分析
本文实例讲述了Java序列化中子类、父类构造函数问题。分享给大家供大家参考,具体如下:
一介绍
1、如果父类实现了序列化接口,子类就不需要实现序列化接口。
2、创建对象的时候,递归调用了父类的构造函数。
3、对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被调用,否则不会被调用。
二实例
packagecom.imooc.io;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.ObjectInputStream;
importjava.io.ObjectOutputStream;
importjava.io.Serializable;
publicclassObjectSeriaDemo2{
publicstaticvoidmain(String[]args)throwsException{
ObjectOutputStreamoos=newObjectOutputStream(
newFileOutputStream("demo/obj1.dat"));
Foo2foo1=newFoo2();//创建对象的时候,递归调用了父类的构造函数
oos.writeObject(foo1);
oos.flush();
oos.close();
//反序列化是否递归调用父类的构造函数,不能证明
ObjectInputStreamois=newObjectInputStream(
newFileInputStream("demo/obj1.dat"));
Foo2foo2=(Foo2)ois.readObject();
System.out.println(foo2);
ois.close();
ObjectOutputStreamoos1=newObjectOutputStream(
newFileOutputStream("demo/obj1.dat"));
Bar2bar1=newBar2();
oos1.writeObject(bar1);
oos1.flush();
oos1.close();
ObjectInputStreamois1=newObjectInputStream(
newFileInputStream("demo/obj1.dat"));
Bar2bar2=(Bar2)ois1.readObject();
System.out.println(bar2);
ois1.close();
/*
*对子类对象进行反序列化操作时,
*如果其父类没有实现序列化接口
*那么其父类的构造函数会被调用
*/
}
}
/*
*一个类实现了序列化接口,那么其子类都可以进行序列化
*/
classFooimplementsSerializable{
publicFoo(){
System.out.println("foo...");
}
}
classFoo1extendsFoo{
publicFoo1(){
System.out.println("foo1...");
}
}
classFoo2extendsFoo1{
publicFoo2(){
System.out.println("foo2...");
}
}
classBar{
publicBar(){
System.out.println("bar");
}
}
classBar1extendsBar{
publicBar1(){
System.out.println("bar1..");
}
}
classBar2extendsBar1implementsSerializable{
publicBar2(){
System.out.println("bar2...");
}
}
三运行结果
foo...
foo1...
foo2...
com.imooc.io.Foo2@913fe2
bar
bar1..
bar2...
bar
bar1..
com.imooc.io.Bar2@eb7859
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。