Abstract classes that cannot be instantiated, and are frequently either partially implemented, or not at all implemented.

 

Abstract classes are useful when creating components because they allow you specify an invariant level of functionality in some methods, but leave the implementation of other methods until a specific implementation of that class is needed. 

 

Abstract class may implement an unlimited number of interfaces, but may inherit from only one abstract (or any other kind of) class.