This is not  weird issue! This is the known fact that readObject and writeObject has to be private. And obviously cannot be abstract. It not like Object has these functions and you are overriding them. These functions are actually being defined here to explicitly control the serialization of the fields of this class and only this class (not the fields of subclasses). If subclasses want to customize its serialization, then they need to define their own readObject and writeObject. The objectoutputstream actually uses reflection to test whether these functions are defined on the instance to be serialized, and calls them. 

It is a well known behavior and doesnt deserve a comment :)