The more I work with deep inheritance hierarchies, the more I wonder if inheritance is actually a good idea. If you’re looking to avoid the trouble overusing inheritance can get you into, this article has some handy tips: Inheritance is evil. Stop using it.
Inheritance is a tool like many others. It just so happens that it’s baked into many languages instead of being a bolt-on pattern. There are times when it’s useful, there are times when it isn’t. Use the right tool for the job instead of reaching for the tool you’re most familiar with :)