An abstract class is a class in OOP that cannot be instantiated on its own and is meant to be subclassed. It often contains one or more abstract methods, which are declared but not implemented in the abstract class. Subclasses that inherit from an abstract class are required to provide concrete implementations for these methods. Abstract classes are used to define a common interface and shared behavior while enforcing a contract for subclasses.