В целом (имеется в виду, что исключения допускаются при четко определенных обстоятельствах), поле класса должно быть private
, и любой доступ к нему потребует использования метода получения или установки (или, более общего, ' accessor 'или' mutator ').
Одно (общеизвестное) исключение относится к static final
полям неизменяемого или примитивного типа - иногда их называют константой .
Когда вы можете быть уверены (действительно уверены), что ваш код является единственным, который получит доступ к этому полю (на данный момент и в обозримом будущем), вы можете рассмотреть возможность сделать его public
(редко), package private
или protected
. Вы найдете этот шаблон довольно часто в классах из пакетов java
и javax
; он работает там, потому что вы не можете поместить свои новые классы в один из этих пакетов, и поэтому код в вашем классе не может получить доступ к полям package private
и protected
- и потому что (абстрактные) базовые классы в этих пакетах, которые имеют protected
поля сами по себе не public
, наследование не помогло бы.
Это не будет работать в большинстве других случаев (хотя с Jigsaw… все меняется), поэтому в этих случаях вы ограничены частными внутренними классами.
Конечно, когда вы пишете только одноразовый код, подобные соображения устаревают. В противном случае вы всегда должны полностью инкапсулировать все данные, чтобы вы / ваш код имели полный контроль над любым доступом / изменением этих данных.