老规矩,先上代码再总结:
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;
public class main {
public static void main(String[] args)throws IOException, ClassNotFoundException{
ObjectOutputStream oos=new ObjectOutputStream(
new FileOutputStream("employee.dat"));
Foo2 foo2=new Foo2();
oos.writeObject(foo2);
oos.flush();
oos.close();
ObjectInputStream ois=new ObjectInputStream(
new FileInputStream("employee.dat"));
Foo2 foo21= (Foo2)ois.readObject();
System.out.println(foo21);
ois.close();
}
}
class Foo {
public Foo(){
System.out.println("foo...");
}
}
class Foo1 extends Foo implements Serializable{
public Foo1(){
System.out.println("foo1...");
}
}
class Foo2 extends Foo1{
public Foo2(){
System.out.println("foo2...");
}
}
天啦噜,这段代码好长好长。
怎么说呢?大家先看看运行结果吧:
通过上面的内容,我们可以总结出java对象序列化与非序列化时子父类构造方法的调用法则:
1.在序列化过程中,构造可序列化的子类对象时总要递归调父类的构造方法;
2.在反序列化过程中,构造子类对象时总是只显示调用(该子类及其不可序列化父类)的构造方法;
注意这里的括号,明白我的意思吧,我这人嘴笨,可能解释不清楚,大家见谅。