An abstract class is a class that is declared by using the abstract keyword. It may or may not have abstract methods. Abstract classes cannot be instantiated, but they can be extended into sub-classes. An abstract class is useful when there is common functionality that's like to implement in a super class and some behavior is unique to specific classes. So you implement the super class as an abstract class and define methods that have common subclasses. Then you implement each subclass by extending the abstract class and add the methods unique to the class.