Private оправдан в тех случаях, если неправильное переопределение метода или атрибута наследником может привести к появлению некорректного состояния объекта (реализации нарушения инкапсуляции).
Ваша ошибка в том, что вы сравниваете protected в первую очередь c private, хотя на самом деле разница между protected и public намного меньше, чем между private и protected.
Проблемы будут как раз из-за того, что это не входит в интерфейс и почти всегда нарушает два принципа из SOLID, а именно Open/closed principle и Liskov substitution principle.
Ну поспрашивали вы, а смысл?