首页 > 编程 > Java > 正文

Java序列化中子类、父类构造函数问题实例分析

2019-11-26 08:36:28
字体:
来源:转载
供稿:网友

本文实例讲述了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相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表