One should be able to extend a classes behavior, without modifying it.
When designing a class (or any software entities - classes, modules, functions, etc.), there should be careful encapsulation of the logic so that it has good maintenance, meaning that we want it to be open to extension but closed for modification. In detail, when necessary, we should be able to extend the behavior of a class through inheritance, interface, and composition, but we cannot allow the opening of this class to make modifications.
This means that we want our code to be extensible and to adapt to new requirements, or changes in the domain problem. In other words, when a new requirement, or a requirement for a change appears on the domain problem, we only want to add new functionalities to our model, not change anything existing that is closed to modification.
If, when something new (requirement, requirement for change, etc.) has to be added, we have to modify the code, it probably means that the logic is poorly designed. In an ideal code base, when requirements change, we will only have to extend the module with the new required behavior in order to comply with the new requirements, but without having to modify the code.