Частные методы в порядке, потому что они, ну, частные, что делает их невидимыми для любого, кто использует классы, которые вы разрабатываете. Частные члены не имеют никаких будущих обязательств с вашей стороны: если вы им не нравитесь, вы можете изменить их в любое время.
Абстрактные классы позволяют делиться реализацией между наследуемыми от них классами. Вы можете решить, какую реализацию вы хотите поделиться, и какие языковые функции вы собираетесь использовать для реализации этих общих функций. Сюда входят частные методы, частные переменные, частные вложенные классы и т. Д.
Я бы сказал, что это не только хорошая практика, но и важная. Если класс содержал только абстрактные методы, вместо этого использовался бы интерфейс. – NineBerry
Вы можете увидеть и пример в шаблоне шаблона (https://en.wikipedia.org/wiki/Template_method_pattern). Базовый класс является абстрактным и имеет защищенные и общедоступные методы. –