no idea why I made Printer an abstract base class