When you need to provide a common base with shared code and enforce specific behavior in subclasses.
An abstract base class is suitable when there is shared functionality that can be implemented in the base class, alongside abstract methods for subclass-specific implementations. For example, a 'Vehicle' abstract class might implement 'startEngine' and have an abstract 'move' method, allowing subclasses like 'Car' and 'Bicycle' to provide their unique movement logic.