The fact is, designing classes
is hard, and designing reusable classes is even harder.
The best estimates reveal that even experienced object-oriented programmers take three times as long to design a class that can be
reused in other contexts as they do to solve the immediate problem they face.
Given this time cost, it is no wonder that few programmers explicitly code for reuse. Software projects are routinely understaffed,
under-budgeted and over deadline. Although a class you actually reuse can repay its cost of development on the fourth project,
few organizations have the human capital needed to invest in truly reusable code.
In fact, reuse is often considered only by companies developing class libraries for third party use,
where the extra cost of designing for reuse can be repaid hundreds of times over on many thousands of different projects.
A class that is derived from a particular class, perhaps with one or more classes in between.