From the javadoc of Serializable
Classes that need to designate a replacement when an instance of it is read from the stream should implement this special method with the exact signature.
ANY-ACCESS-MODIFIER Object readResolve() throws ObjectStreamException;
So proper declaration
means the method must have the same declaration as above.
This behavior exists because
Serializable serves as a marker to the JRE/JVM, which may take action(s) based on its presence.
But doesn't have any abstract methods declared of its own.