A software system designed for a specific project must usually be very specialized.
A software system designed as a reusable tools must usually be very general.
Inheritance allows one to take a very general software component and specialize it for use in a specific project.