Перефразируя (как указал Эрик, использование глаголов вводит в заблуждение), я считаю, что ваш вопрос:
Должен ли CharacterGenerator быть своего рода ClassGenerator, который сам должен быть своего рода StatsGenerator? Несколько соображений:
Есть ли у вас другие типы вещей, которые вы ожидаете получить от ClassGenerator или StatsGenerator? Если нет, вам не нужно наследование.
У вас есть другой код, который хочет использовать любой StatsGenerator или любой ClassGenerator? Если у вас нет кода, который работает с использованием базовых классов, вам не нужны базовые классы.
Основываясь на именах, я думаю, что вы действительно пытаетесь описать композиционные отношения. Посмотрите, звучит ли это выражение скорее как то, что вы пытаетесь сделать:
У вас есть CharacterGenerator, который использует ClassGenerator для генерации класса персонажа и StatsGenerator для генерации статистики персонажа. В результате получается персонаж, содержащий класс и статистику.
Существует множество способов моделирования и решения проблем при программировании; Лучше всего предпочесть самый простой подход, а отношения наследования добавляют сложность. У вас должна быть веская причина для введения этой сложности, если вы планируете ее использовать.
Кроме того, как уже отмечали другие, вам не обязательно определять класс для составного поведения. В некоторых случаях достаточно метода или нескольких методов. Тем не менее, не обязательно плохо ошибаться на стороне «слишком маленьких» (маленьких классов с несколькими методами), а не «слишком больших» (нескольких гигантских классов, полных всевозможных методов). Найти правильный баланс сложно так что экспериментируйте.