John,
In an Object Oriented application design there will be classes that are meant to be only subclassed (that is they are NEVER used to instantiate objects) and there are classes that are not subclassed (that is they are only used to instantiate objects). These classes are referred to as abstract (template) classes and concrete classes respectively.
As to why a class would be one or the other, that is dependant on the design of the application.