Unlike interfaces, which can be described as contracts for implementation, abstract classes act as contracts for extension.
An abstract class cannot be instantiated, it must be extended and the resulting class (or derived class) can then be instantiated.
Abstract classes are used to provide generi...