More importantly, this forces you to create an explicit interface for any code you'd like to reuse between implementations.
Inheritance is fragile for a lot of reasons (see e.g., fragile base class). But the most common failure modes all have the same thing in common: the error happens because a developer fails to realize that there's an implicit interface between two things in the object heirarchy.