DEV Community

Bertil Muth
Bertil Muth

Posted on

Inheritance over composition

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)

Collapse
 
sam_ferree profile image
Sam Ferree •

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)

Collapse
 
bertilmuth profile image
Bertil Muth •

Do you use dependency inversion/injection in the composition case? Otherwise depending on the details seems rather unusual to me :)

Collapse
 
sam_ferree profile image
Sam Ferree •

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.

Collapse
 
courier10pt profile image
Bob van Hoove •

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.

Collapse
 
agronick profile image
Kyle Agronick •

If OO is so 1990s why did JavaScript just add class support in ES5? Pretty much every big language is object oriented.