An abstract class can provide complete, default code and/or just the details that have to be overridden.
In the case of an abstract class, a class may extend only one abstract class.
An abstract class can have non-abstract methods.
An abstract class can have instance variables.
An abstract class can have any visibility: public, private, protected.
If we add a new method to an abstract class then we have the option of providing default implementation and therefore all the existing code might work properly.
An abstract class can contain constructors.
Abstract classes are fast.