Abstract Base Class
A formal mechanism to designate the relationships between different implementations of the same abstractionis through the definition of one class that serves as an abstract base class, via inheritance, for one or more concrete classes.
The abstract base class may not have any concrete methods implemented, but still define expectations of methods that should exit as abstract methods. The subclasses that inherit the abstract base class are responsible for overriding abstract methods to provide a working implementation for each behaviour.