Как правило, после того, как вы сделаете переменную public
, вы будете привержены и никогда не сможете вернуться к этому решению. Каждое будущее изменение изменит открытый интерфейс вашего класса, что, в свою очередь, означает, что необходимо изменить каждое использование этого класса. Для публичного API это немыслимо; ваша библиотека фактически сломала обратную совместимость.
Даже для частных классов это довольно большое дело.
Так когда же вы когда-нибудь измените область действия переменной на private
в будущем? Есть много возможных причин для этого. Самым простым является то, что вашему классу может потребоваться что-то делать каждый раз, когда изменяется значение переменной (например, регистрировать изменение или обновлять другие переменные соответственно). Или позже вы решите, что переменная вообще не нужна, и что запрашиваемое пользователем значение должно вычисляться на лету.
Если вы непосредственно читаете или устанавливаете переменную, это невозможно. Вместо этого вашему классу нужно заставить пользователя вызывать метод получения / установки, запретив прямой доступ к переменной и предлагая вместо него соответствующие общедоступные методы получения / установки.
Поскольку в общем случае вы не можете никогда предвидеть такие будущие изменения, стало общепринятой практикой делать нет переменной public
. Каждая переменная должна быть private
(или, по крайней мере, внутренней).
(Есть одно исключение: в некоторых случаях final
переменные можно безопасно сделать public
. Например, константы, подобные enum, часто реализуются как переменные public final
в библиотеках Java, потому что они никогда не изменятся, и нет требуется контроль доступа, так как в любом случае они доступны только для чтения).