序列化与反序列化时子类和父类构造方法调用规则

博客探讨了子类和父类在实现序列化接口的区别,指出父类未实现序列化接口时,子类序列化会忽略父类对象,反之则父类也会被序列化。在反序列化过程中,如果父类无默认构造方法,会导致异常。文章通过实例展示了序列化时会递归调用父类构造函数,而特定情况下反序列化可能不调用构造方法。
摘要由CSDN通过智能技术生成

子类实现序列化接口与父类实现序列化接口有什么区别吗?

父类如果没有实现Serializable接口,而子类实现序列接口,那么父类对象就不会被序列化,也就不会被保存,而子类却可以被序列化,即会被保存。但是如果父类没有默认构造方法则在反序列化时会出异常;父类实现序列化则子类会自动实现序列化而不需要显式实现 Serializable 接口。

那么序列化与反序列化时子类和父类构造方法是怎么调用的?

来看一个简单的例子:

import java.io.*;

//父类实现Serializable接口
class Father1 implements Serializable {
    public Father1(){
        System.out.println("Base1");  
    } 
}
class Child1 extends Father1{
	public Child1(){        
		System.out.println("Child1");   
	}
}
 //父类未实现Serializable接口
class Father2{
	public Father2(){
        System.out.println("Base2");
	}
}
  //子类实现Serializable接口
class Child2 extends Father2 implements Serializable{
	public Child2(){
		System.out.println("Child2");
	}
}

public class Demo{
	public static void main(String[] args) throws Exception{
		//序列化,父类实现了Serializable接口,父子类都被序列化,即保存
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值