Обычно родительские классы больше похожи на общие классы, которые вы собираетесь расширять и редко используете самостоятельно.Таким образом, наследование больше похоже на то, каким оно должно быть: вы расширяете универсальный класс.
Я не собираюсь снова обращаться к метафоре животного, но что-то вроде:
class USER {} // generic class
class ADMIN extends USER {} // specific class
class MOD extends USER {} // specific class
имеет логику, потому что мы расширяем универсальный класс USER, чтобы указать класс для каждого типа пользователя.
Для всего, что не является иерархическим, я бы использовал инкапсуляцию.