Why do we need to create a WriteObject() and ReadObject() method in B? Everything seems reversed... Method looks like that: B::writeObject(ObjectOutputStream) B::readObject(ObjectInputStream) But we use them like that: ObjectOutputStream::writeObject(B) (B) ObjectInputStream::readObject() I don't understand how it works...