Да начнется холивар
Видел кучу разных, зачастую противоположных, мнений, но на мой взгляд - инкапсуляция не равно сокрытие (про которое вы и пишите, судя по типам полей).
Сокрытие является частным случаем инкапсуляции. В общем же случае инкапсуляция подразумевает объединение связанных элементов в один объект. Например есть юзер. У него есть разные свойства (логин-пароль/аватарка/id-шка). И если данные можно хранить в структурах (словари/массивы/списки и т.д,), то функции, описывающие взаимодействие с этим юзером просто так не сгруппируешь. Для этого и придумали инкапсуляцию и ООП.
Сокрытие же в этом случае может применяться например для создания "точки входа" при работе с паролем для защиты от "дураков"/предварительной обработки/проверки данных.
Делаем поле private и все, "тупо изменить" его извне уже нельзя. Для его изменения мы предоставляем метод, который перед тем как изменить его (условно):
- Валидирует значения по заданным критериям
- Проверяет наличие прав на изменение пароля
UPD.
но кто сможет потом их поменять, если я не добавлю функцию для изменения?
Ну, видимо никто. Если не добавите советующую функцию.
Какая разница, private я установил или public, функции для изменения не будет у программы и никто и никак не сможет поменять этот URL.
Ну, в этом смысла нет, но можно упомянуть какие-то внутренние вещи. Например
сессии юзера. Извне методы работы с ними в таком классе не доступны в принципе, для безопасности. Но внутри класса к ним есть доступ у других медодов.