Use abstract classes for shared base functionality.
Abstract classes are preferred when you need to provide a common base implementation for multiple classes. This is useful when you want to avoid code duplication across classes. In a web application, an AbstractUser class could provide common methods like getUsername(), while specific user types extend it for additional functionality.