An abstract class is a class that can not be instantiated but that can contain code.
An interface only contains method definitions but does not contain any code.
With an interface, you need to implement all the methods defined in the interface.
If you have logic that will be the same for all the derived classes, it is best to go for a
abstract class in stead of an interface. You can implement multiple interfaces but only
inherit from one class.