When related types need common state or partial implementation from one base class.
Abstract classes are useful when the hierarchy really shares base fields or behavior. They are less about syntax and more about whether there is a meaningful common implementation to inherit.