时间:2021-05-20
本文实例讲述了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程序设计有所帮助。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
类的实例化顺序父类静态变量、父类静态代码块、子类静态变量、子类静态代码块、父类非静态变量(父类实例成员变量)、父类构造函数、子类非静态变量(子类实例成员变量)、
这里直接给出C#类成员一般初始化顺序:子类静态字段子类静态构造子类实例字段父类静态字段父类静态构造父类实例字段父类实例构造子类实例构造为什么说是“一般”初始化顺
Java在构造函数中,第一行会先调用父类中构造函数进行初始化。父类初始化完毕后,再对子类的属性进行显示初始化。进行子类构造函数的特定初始化。初始化完毕后,将地址
实现java.io.Serializable接口的类是可序列化的。没有实现此接口的类将不能使它们的任一状态被序列化或逆序列化。序列化类的所有子类本身都是可序列化
本文实例讲述了Java子类对象的实例化过程。分享给大家供大家参考,具体如下:一点睛子类对象在实例化时,子类对象会默认先调用父类中的无参构造函数,然后再调用子类构