/* Listing4108.java */

import java.io.*;
import java.util.*;

public class Listing4108
{
  public static void main(String[] args)
  {
    //Erzeugen der Familie
    Person opa = new Person("Eugen"); 
    Person oma = new Person("Therese");
    Person vater = new Person("Barny");
    Person mutter = new Person("Wilma");
    Person kind1 = new Person("Fritzchen");
    Person kind2 = new Person("Kalli");
    vater.father = opa;
    vater.mother = oma;
    kind1.father = kind2.father = vater;
    kind1.mother = kind2.mother = mutter; 

    //Serialisieren der Familie
    try {
      FileOutputStream fs = new FileOutputStream("test3.ser");
      ObjectOutputStream os = new ObjectOutputStream(fs);
      os.writeObject(kind1);
      os.writeObject(kind2);
      os.close();
    } catch (IOException e) {
      System.err.println(e.toString());
    }

    //Rekonstruieren der Familie
    kind1 = kind2 = null; 
    try {
      FileInputStream fs = new FileInputStream("test3.ser");
      ObjectInputStream is = new ObjectInputStream(fs);
      kind1 = (Person)is.readObject();
      kind2 = (Person)is.readObject();
      //Überprüfen der Objekte
      System.out.println(kind1.name); 
      System.out.println(kind2.name);
      System.out.println(kind1.father.name);
      System.out.println(kind1.mother.name);
      System.out.println(kind2.father.name);
      System.out.println(kind2.mother.name);
      System.out.println(kind1.father.father.name);
      System.out.println(kind1.father.mother.name); 
      //Name des Vaters ändern
      kind1.father.name = "Fred"; 
      //Erneutes Überprüfen der Objekte
      System.out.println("---"); 
      System.out.println(kind1.name);
      System.out.println(kind2.name);
      System.out.println(kind1.father.name);
      System.out.println(kind1.mother.name);
      System.out.println(kind2.father.name);
      System.out.println(kind2.mother.name);
      System.out.println(kind1.father.father.name);
      System.out.println(kind1.father.mother.name); 
      is.close();
    } catch (ClassNotFoundException e) {
      System.err.println(e.toString());
    } catch (IOException e) {
      System.err.println(e.toString());
    }
  }
}