This week's book giveaway is in the OCPJP forum. We're giving away four copies of OCA/OCP Java SE 7 Programmer I & II Study Guide and have Kathy Sierra & Bert Bates on-line! See this thread for details.
You aren't overriding readObject(), you're just providing it. If it's there then it's used, if it's not then the default behaviour is used (which basically involves trying to serialize every member variable that's not marked transient).
If Serializable declared the methods then you'd have to implement them. This way you only implement them when you need to (which is usually when you want to serialize a member variable that's not serializable).