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

网友投稿 249 2023-06-15

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

本文实例讲述了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();

//反序列化是drMzTLNYS否递归调用父类的构造函数,不能证明

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程序设计有所帮助。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:浅谈Hibernate对象状态之间的神奇转换
下一篇:Java正则相关的Pattern和Matcher类及遇到的坑
相关文章

 发表评论

暂时没有评论,来抢沙发吧~