Inheritance is often used as an enabler for polymorphism in languages that don't support it in any other way.
Somehow, it leaked out and convinced everyone that it is a good thing on its own.
Also encapsulation and code reuse. Message passing if you go by the guy who coined the term.
There are two types of inheritance:
- interface/API based -- this is supported in modern languages via interfaces, traits, etc.
- implementation/code based -- modern languages tend to only support single inheritance; they tend to also support default method implementations on the interfaces/traits