Lesson learned from Smalltalk
...was that inheritance is a very useful feature for mature code. And there in lies the rub - immature code should minimize the use of inheritance. Unfortunately, with static typing, you have to ake the decision on the type of delegation upfront. Dynamic languages allow you to work your way into inheritance instead of making it a now or never proposition.