Нет, это плохая идея — вызывать абстрактные методы внутри конструктора абстрактного класса. Такой подход создаёт серьёзные проблемы с инициализацией и дизайном.
Фундаментальная проблема вытекает из последовательности инициализации объекта. Когда создаётся экземпляр подкласса:
Это значит, что переопределённый метод работает с не до конца инициализированным объектом, что может привести к неожиданному поведению или ошибкам.
Большинство IDE помечают такой паттерн предупреждением "Overridable method call in constructor". Это предупреждение существует именно потому, что такой подход нарушает принципы хорошего объектно-ориентированного дизайна.
Вызов абстрактных методов в конструкторе ограничивает то, как дочерние классы могут реализовать эти методы. Разработчикам подклассов приходится учитывать неполное состояние инициализации, что:
Вместо вызова абстрактных методов в конструкторах подумай о:
Такой подход обеспечивает чистое разделение ответственности и даёт подклассам полную свободу реализации.
Когда конструктор суперкласса вызывает абстрактный метод, переопределённая реализация подкласса вызывается до того, как завершится выполнение конструктора подкласса.
Новый — ещё не проверен сообществом
Вы