When the object is read back off the disk, I would expect that there would be a call to the constructor for CardPlayer and a call to the constructor for Player. However, I am only getting the constructor call for Player. I am hoping that somebody can tell why this is.
Basically because Player is not serializable, and CardPlayer is. A Serializable instance is normally deserialized without calling its constructor. But if the base class isn't serializable, the serialization mechanism won't store its state; instead, the base part of the object will be initialized with a constructor call.
If you mark Player as Serialized, you'll see that printout disappear.