6-3 序列化中父类构造函数问题
只要实现序列化接口,就能够进行序列化。
如果父类实现了序列化接口,子类则不必实现了
序列化中子类和父类构造函数的调用问题
序列化时:子类递归调用了父类的构造函数
反序列化:对子类对象进行反序列化操作时,如果其父类没有实现序列化接口,那么其父类的构造函数会被调用
import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.io.Serializable; public class demo2 { public static void main(String[] args) throws IOException, Exception { // ObjectOutputStream oos=new ObjectOutputStream(new FileOutputStream("demo/obj1.dat")); // Foo2 foo2=new Foo2(); // oos.writeObject(foo2); // 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 oos=new ObjectOutputStream(new FileOutputStream("demo/obj1.dat")); // Bar2 bar2=new Bar2(); // oos.writeObject(bar2); // oos.flush(); // oos.close(); ObjectInputStream ois=new ObjectInputStream(new FileInputStream("demo/obj1.dat")); Bar2 bar2=(Bar2)ois.readObject(); System.out.println(bar2); ois.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 implements Serializable{ public Bar1(){ System.out.println("bar1..."); } } class Bar2 extends Bar1{ public Bar2(){ System.out.println("bar2..."); } }