How to serialize non-serializable base class in standard serialization?

java, serialization

Solution

You can't! field `a` will not be serialized! Work around: implement your custom serialization. You should implement `Externalizable` interface and `writeExternal, readExternal` methods. In thess methods you can write and read value of your `a` field.

Problem

I can't control the source code of the base class, then, how can I use standard serialization on the subclass? In this example, field `a` is not serialized at all, though B is serializable: // a.jar ``` class A { int a; } ``` // b.jar ``` class B extends A implements Serializable { int b; } public class HelloWorldApp { public static void main(String[] args) throws Exception { B b = new B(); b.a = 10; b.b = 20; ByteArrayOutputStream buf = new ByteArrayOutputStream(); ObjectOutputStream out = new ObjectOutputStream(buf); out.writeObject(b); out.close(); byte[] bytes = buf.toByteArray(); ByteArrayInputStream _in = new ByteArrayInputStream(bytes); ObjectInputStream in = new ObjectInputStream(_in); B x = (B) in.readObject(); System.out.println(x.a); System.out.println(x.b); } } ``` Output: ``` 0 20 ```

Original source