bjeto Java Serialização e herança

Diga que você tem essas duas classes, Foo e Bar, onde Bar estende Foo e implementaSerializable

class Foo {

public String name;

public Foo() {
    this.name = "Default";
}

public Foo(String name) {
    this.name = name;
}
}

class Bar extends Foo implements java.io.Serializable {

public int id;

public Bar(String name, int id) {
    super(name);
    this.id = id;
}
}

Observe que Foo não implementaSerializable. Então, o que acontece quando a barra é serializada?

    public static void main(String[] args) throws Exception {

    FileOutputStream fStream=new FileOutputStream("objects.dat");
    ObjectOutputStream oStream=new ObjectOutputStream(fStream);
    Bar bar=new Bar("myName",21);
    oStream.writeObject(bar);

    FileInputStream ifstream = new FileInputStream("objects.dat");
    ObjectInputStream istream = new ObjectInputStream(ifstream);
    Bar bar1 = (Bar) istream.readObject();
    System.out.println(bar1.name + "   " + bar1.id);

} 

it imprime "21 padrão". A questão é: por que o construtor padrão é chamado quando a classe não é serializad

questionAnswers(3)

yourAnswerToTheQuestion