Почему конструктор класса Food and Fruit называется, когда я deserialize, где конструктор SkinFruit и Banana2 не вызывается в приведенном ниже примере?Если сериализация наследуется в иерархии, тогда будет вызываться конструктор класса, не реализующий сериализуемый. Почему это так?
Пусть я следующие иерархии классов
class Food{
public Food() { System.out.println("1"); }
}
class Fruit extends Food {
public Fruit() { System.out.print("2"); }
}
class SkinFruit extends Fruit implements Serializable{
SkinFruit() { System.out.print("3"); }
}
public class Banana2 extends SkinFruit {
private static final long serialVersionUID = 1L;
int size = 42;
public static void main(String [] args) {
Banana2 b = new Banana2();
FileOutputStream fost;
try {
fost = new FileOutputStream(new File("d:/testbanana.ser"));
ObjectOutputStream oostr= new ObjectOutputStream(fost);
oostr.writeObject(b);
oostr.flush();
oostr.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
}catch (IOException e) {
e.printStackTrace();
}
try {
FileInputStream fin= new FileInputStream(new File("d:/testbanana.ser"));
ObjectInputStream objin= new ObjectInputStream(fin);
b=(Banana2)objin.readObject();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
System.out.println(" restored "+ b.size + "");
}
}
Вы уверены, что ваши объекты сериализуются в классе A? Не могли бы вы разместить код сериализации и десериализации? –
Не вводите код из памяти в свой вопрос. Всегда копировать и вставлять. –
, который из вашего класса реализует Serializable интерфейс? –