对象反序列化时,如果父类未实现序列化接口,则反序列出的对象会再次调用父类的构造函数来完成属于父类那部分内容的初始化

对象反序列化时,如果父类未实现序列化接口,则反序列出的对象会再次调用父类的构造函数来完成属于父类那部分内容的初始化。
1、当将一个父类没有实现序列化的对象son使用ObjectOutputStream流写到本地文件中时,没有能将该对象中属于父类的部分写入到文件,因为ObjectOutputStream流不能将一个没有实现序列化的类的对象写入文件中。当将本地文件中保存的son对象通过ObjectInputStream流反序列化到程序中,由于缺少属于父类的部分信息,则需要再次调用父类的构造器来完成初始化。

代码:Father类未实现序列化时

public static void main(String[] args) throws Exception{
    Son son=new Son();
    File f=new File("C:\\Users\\Administrator\\Desktop\\RoadObject.txt");
        ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f));
        oos.writeObject(son);
        oos.close();
        ObjectInputStream ois=new ObjectInputStream(new FileInputStream(f));
        Son son1=(Son) ois.readObject();
        ois.close();
        System.out.println(son1);
    }
class Father {
    public Father(){
        System.out.println("I am Father!!");
    }
}

class Son extends Father implements Serializable{
    public Son(){
        super();
        System.out.println("I am Son!");
    }
    @Override
    public String toString() {
        return "小明";
    }
}

运行的结果:

I am Father!!
I am Son!
I am Father!!
小明

2、当父类和子类都实现序列化,反序列化时则不需要再次调用父类的构造函数
代码:

public static void main(String[] args) throws Exception{
    Son son=new Son();
    File f=new File("C:\\Users\\Administrator\\Desktop\\RoadObject.txt");
    ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream(f));
    oos.writeObject(son);
    oos.close();
    ObjectInputStream ois=new ObjectInputStream(new FileInputStream(f));
    Son son1=(Son) ois.readObject();
    ois.close();
    System.out.println(son1);
}
class Father implements Serializable{
    public Father(){
        System.out.println("I am Father!!");
    }
}
class Son extends Father implements Serializable{
    public Son(){
        super();
        System.out.println("I am Son!");
    }
    @Override
    public String toString() {
        return "小明";
    }
}

运行的结果:

I am Father!!
I am Son!
小明
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值