Собственно это вопрос практики, это у теоретиков, начитавшихся википедий всё просто, на деле всё несколько сложнее и в том числе меняются и интерфейсы, и в результате приходится подстраиваться под новые реалии: новые версии используемых классов, новые версии каких-нибудь api и т.д., поэтому на практике существуют такие понятия, как например, обратная совместимость и т.п. Это нормально, это жизнь в реальности, а не на страницах умных книжек. Я не знаю, чем руководствовались разрабы твоего примера, но они мягко говоря кхм...
1. public - интерфейс общения с внешней средой
2. protected - интерфейс общения внутри связей родитель-потомок
3. private - интерфейс общения внутри одного класса
Всё это объединяется одним понятием - инкапсуляция. Private применяется когда необходимо скрыть реализацию родителя от возможных потомков. Protected - когда необходимо скрыть реализацию от сторонних классов, но при этом сохранить полиморфность при наследовании, т.е. возможности при необходимости переопределить нужный метод, дабы изменить его поведение исходя из новых реалий потомка.
Финальный метод нельзя переопределить просто потому, что его функциональность конечна.
Не знаю как ещё объяснить, я ж не теоретик.
_____________
Gear FrameworkGear Framework на Github