We now have a good abstract class, which behaves as a well
defined interface, plus when it comes time to substitute in another class of
the same type, we have a lot of the plumbing already there. If we had
used an interface it would mean we would have to rewrite a lot more code.
This minimized our code creation and maintenance, but still keeps us in good
object hierarchy.