NOTE There is an exception: if your abstract base class can have one and only one concrete derived class, it is acceptable to give that derived class the generic name. In that case, the abstract class should have Abstract in its name. For example, the model class hierarchy has TAbstractModel, from which descended TModel and TModelSurrogate. TModel is the base for all concrete derived classes (as a surrogate, TModelSurrogate doesn't count).
If you find you have trouble with these rules, perhaps your class hierarchy needs rethinking. For example, an earlier text class hierarchy included TText and TBaseText; TBaseText was an abstract base class from which TText descends. Normally, TText, as the more generic name, should be used for the base class. The new hierarchy works this way, with TStandardText as the default implementation.