Java и модификаторы доступа

   Привет, Марсиане. Сегодня я поведаю вам еще немного информации о очень увлекательном и самом распространенным языке на планете. На нем говорят даже бабушки. В общем речь идет о JAVA. 
   Что-то зачастил со статьями. Когда-то примерно год назад решил, что буду писать каждый день и хотя бы по чуть-чуть. И таким образом разовью в себе писательский или еще какой-нибудь талант:)
   Речь сегодня пойдет о модификаторах доступа. В Java их всего три:
  1. private - модификатор открытого доступа
  2. public - модификатор закрытого доступа
  3. protected - модификатор защищенного доступа
   Дальше обо всем по порядку.
   Итак, модификатор private позволяет скрывать методы и поля класса от любопытных глаз. Т.е. если у метода или класса будет этот модификатор, то вне класса к нему нельзя будет обратиться. 
Этот модификатор позволяет придерживаться инкапсуляции данных
   Модификатор доступа public предоставляет полную свободу как внутри класса, так и снаружи его. Чем плох этот модификатор? А плох он тем, что предоставляет неограниченную свободу программистам. Дай ребенку волю, так он всю квартиру разнесет и устроит для соседей аквапарк. Тоже самое и с программистом. Свобода должна быть в меру.
   Модификатор protected. Я называю его золотой серединой. Ибо методы и поля, объявленные с таким модификатором можно использовать только в подклассах, а так же классах находящихся в том же пакете. Как правило в большей степени используют этот  модификатор для методов, нежели для полей. Так как существует вероятность, когда без вашего ведома другие программисты будут использовать поля вашего супер класса в своих подклассах. После этого вы уже не сможете изменить реализацию класса не уведомив об этом других программистов.
   
   Ниже определены несколько правил, которые я определил для себя. Но, ими могут пользоваться и другие программисты.
  1. Все поля класса объявлять с модификатором private. 
  2. Все методы, которые не нужны вне класса делать закрытыми (private).
  3. Если метод нужен вне класса, то определять его открытым (public).
  4. Если возможно так случится, что метод понадобится в других классах, то определяем его защищенным.
  5. Если все-таки очень захотелось использовать поля супер класса в подклассах, то конечно же можно использовать модификатор protected. Но лучше этого не делать.
  6. Модификатор public использовать только для констант. Полей объявленных с ключевым словом final.
В заключении хочу сказать, что на самом деле есть еще один модификатор доступа. Он невидимый, но он существует:) Если метод или поле определить без модификатора, то область их видимости распространяется только на пакет.