An interesting feature to note in this class is the use of refinement, rather than replace semantics for overriding. Notice how the function addCard uses the variable super to invoke the similarly named function inherited from the parent class. A refinement is a combination of the behavior of the parent and child classes, and not simply a replacement of the parent class behavior.