More often than not, I hear statements like „favor composition over inheritance“. I think there are valid uses of inheritance, so once again, it depends on context (let‘s ignore deep inheritance hierarchies, I hope we all agree that is usually a bad idea).
What are your experiences? Have you experienced situations where inheritance was really useful?
Top comments (5)
Inheritance for me seems to work best when the inheritance relationship exists in the domain problem I'm modelling.
A triangle is a polygon, etc.
If my main goal is code re-use I always favor composition, and believe that abstractions should depend on details, not vice versa (as is the case with inheritance, details depending on abstractions)
Do you use dependency inversion/injection in the composition case? Otherwise depending on the details seems rather unusual to me :)
Dependency inversion - YES! classes should be honest and declare in the constructor what they need to function correctly.
Dependency injection - If the app is large enough that it make sense to use a DI container, sure. Almost all of what I write these days is either Angular or ASP.NET Core web applications, so Dependency injection is pretty much a guarantee.
The most recent case where I was happily using inheritance was for a data transfer object (DTO) where a variety of messages were defined using a base message type. No behavior there, little chance to get confused.
If OO is so 1990s why did JavaScript just add class support in ES5? Pretty much every big language is object oriented.