First not all object systems implement or provide inheritance for example check
snit
In my understanding inheritence serve two purposes
- Gives you a mean to say that an object have more than one type (play more than one role, thus inheritance and multiple inheritance), this is only useful if you ever need to test an object type, which as far as I only required by static languages, and usually forwned upon in dynamic languages
- Give a default value for the method the object inherited (unless you are inheriting from an abstract class)
I think you find can other ways to achive both requirements without inheritance. Which makes inheritance an implementation detail, a technique not a requirement.
I prefer to focus on the requirement, and consider the different ways and alternatives to achieve it.