gpt4 book ai didi

java - 如果序列化是在层次结构中继承的,则将调用未实现序列化的类的构造函数。为什么会这样呢?

转载 作者:行者123 更新时间:2023-12-01 07:38:17 25 4
gpt4 key购买 nike

为什么当我反序列化时会调用 Food 和 Fruit 类的构造函数,而下面的示例中没有调用 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类的构造函数,那是因为A类本身没有实现Serialized。在反序列化期间,将调用继承层次结构中第一个不可序列化类的无参数构造函数(可能是 java.lang.Object 的构造函数)。如果该类没有无参数构造函数,则会出现异常。

关于java - 如果序列化是在层次结构中继承的,则将调用未实现序列化的类的构造函数。为什么会这样呢?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8714992/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com