子类实现序列化接口与父类实现序列化接口有什么区别吗?
父类如果没有实现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接口,父子类都被序列化,即保存