serializing when subclass implements Serializable but super doesn't
posted 6 years ago
This thing puzzles me. If I have understood correctly when serializing object whose superclass doesn't implement Serializable we HAVE to have no-arg constructor in the superclass. This superclass constructor is called during deserializing (as opposite to subclasses constructor). This however causes problem if there's no access to superclasses source code (I know there's JDGui, Jad and such, but still..) and it doesn't provide no-arg constructor. Then what one should done in that case? Trying to use serialization with this causes java.io.ObjectStreamException to be thrown..
Another aspect of handling the state of a nonserializable superclass is that nonserializable superclasses must have a zero-argument constructor. This isn't important for serializing out an object, but it's incredibly important when deserializing an object. Deserialization works by creating an instance of a class and filling out its fields correctly. During this process, the deserialization algorithm doesn't actually call any of the serialized class's constructors, but does call the zero-argument constructor of the first nonserializable superclass. If there isn't a zero-argument constructor, then the deserialization algorithm can't create instances of the class, and the whole process fails.
WARNING: If you can't create a zero-argument constructor in the first nonserializable superclass, you'll have to implement the Externalizable interface instead.