Fun with interface, abstract classes and subclasses