You are deserializing an object of class A, which you constructed using the constructor that takes 1 arg. The constructor for A is not run when you deserialize it, because that's the point of serialization. You just copy the state of object A from the serialization file. The problem is that not all of the object's state got serialized. Since A extends B and B is not serializable, when you serialized the instance of A, the part of the object state that is inherited from class B did not get serialized. The way
Java fixes that is by running the default instance initialization code for objects of class B, and that includes a call to the no-arg constructor B(). But because B doesn't have that constructor, you get a runtime exception.
This is explained very well in the K&B book, do you have it?