java序列化父类_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();

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

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值