Code inheritance provides a basis for modularisation. Both are useful in their place. Both require consistency checks that combinations due to inheritance actually make sense. In his taxonomy he identifies 12 uses of inheritance, all of which he finds useful. This analysis also gives a good idea of when inheritance can be used, and when it should not.
Software components are like jig-saw pieces.
When assembling a jig-saw the shape of the pieces must fit, but more importantly, the resulting picture must make sense. Assembling software components is more difficult. A jig-saw is reassembling a picture that was complete before. Assembling software components is building a picture that has never been seen before. What is worse, is that often the jig-saw pieces are made by different programmers, so when the whole system is assembled, the pictures must fit.