Abstract classes are used to achieve abstraction. It is declared by using the "abstract" keyword. It can have both abstract and non-abstract methods. Abstract classes have declaration and implementation of non-abstract methods but the implementation of abstract methods is inside the class where it is extended.