【发布时间】:2022-01-13 18:39:53
【问题描述】:
我们有一个名为“Vehicle”的超类,它实现了标记接口 Serializable。 然后我们有一个名为“Car”的子类,它继承了“Vehicle”,因此子类“Car”也实现了Serializable标记接口,因为它是父“Vehicle”。
现在我们可以将任何车辆实例序列化为文件,而不会出现任何问题。 但是当我们尝试将该文件反序列化为“汽车”类型的对象时,程序会抛出异常。
我解决这个问题的方法是在“Car”类中手动实现 Serializable 标记接口。
为什么会这样?从我今天阅读的关于序列化的所有内容来看,似乎没有人涉及这个问题。
我得出的结论是:“Car”类在继承“Vehicle”类的同时,也继承了“Vehicle”中实现的接口,因此“Car”对象是可序列化的,但是一旦我们序列化一个将“Car”对象的实例复制到文件(例如:“car1.ser”),“car1.ser”文件中写入了一个对象,其中包含所有的修饰符、属性、方法等。 但不知何故,写入“car1.ser”文件的“Car”类型的对象并没有从它的父级继承“Serializable”标记。这是什么原因,我不太确定。
【问题讨论】:
标签: java serialization deserialization