Объяснение модификаторов доступа в Java

Что такое модификаторы доступа?

Вы когда-нибудь хотели определить, как люди будут получать доступ к некоторым из ваших свойств? Вы бы не хотели, чтобы кто-то использовал ваше нижнее белье. Однако ваши близкие друзья и родственники могут использовать ваш свитер и, возможно, вашу машину.

Подобно тому, как вы устанавливаете уровень доступа к своим объектам, Java также контролирует доступ. Вы хотите определить уровень доступа для переменных, методов и классов в зависимости от того, какие другие классы вы хотите получить к ним.

Java предоставляет 4 уровня модификаторов доступа. Это означает, что вы можете изменить доступ к переменной, методу или классу 4 способами. Эти 4 способа являются частными, общедоступными, защищенными и по умолчанию.

Эти модификаторы доступа могут применяться к полям, методам и классам (классы - это особый случай, мы рассмотрим их в конце этой статьи). Вот краткий обзор1 того, что Access Levelsдля каждого Access Modifier:

Справка по таблице модификаторов доступа:

Таблица модификаторов доступа

Модификатор частного доступа

Разрешает доступ к переменной или методу только в том классе, в котором они были созданы. Никакой другой класс, кроме класса, создавшего переменную или метод, не может получить к нему доступ. Это очень похоже на ваши внутренние органы. Они доступны только владельцу. Чтобы сделать переменную или метод закрытыми, вы просто добавляете ключевое слово private перед типом переменной или метода. Давайте использовать private в примере кодирования. Если банк хочет предоставить процентную ставку в размере 10% по своим займам, он будет следить за тем, чтобы переменная процентной ставки (допустим int int_rate;) оставалась частной, чтобы никакой другой класс не пытался получить к ней доступ и изменить ее. Например;

private String name;

В приведенном выше примере создается переменная с именем name и гарантируется, что она доступна только внутри класса, из которого она была создана.

Другой пример метода:

private void setAge(){ System.out.println("Set Age"); }

Приведенный выше пример гарантирует, что метод setAge доступен только внутри класса, из которого он был создан, и нигде больше.

Модификатор публичного доступа

Модификатор открытого доступа является прямой противоположностью модификатора частного доступа. Класс, метод или переменная могут быть объявлены как общедоступные, а это означает, что они доступны из любого класса. Модификатор общественного доступа можно сравнить с государственной школой, куда любой может поступить и быть принятым.

К общедоступному классу, методу или переменной можно получить доступ из любого другого класса в любое время.

Например, чтобы объявить класс общедоступным, вам нужно:

public class Animal{ }

Таким образом, к классу Animal может получить доступ любой другой класс.

public int age; public int getAge(){ }

Выше приведены способы определения переменной и метода как общедоступных.

Модификатор доступа по умолчанию

Модификатор доступа по умолчанию отличается от всех других модификаторов доступа тем, что в нем нет ключевого слова. Чтобы использовать модификатор доступа по умолчанию, вы просто не используете ни один из других модификаторов доступа, и это просто означает, что вы используете модификатор доступа по умолчанию.

Например, чтобы использовать модификатор доступа по умолчанию для класса, вы используете

class Bird{ }

Это в основном означает, что вы используете модификатор доступа по умолчанию. Модификатор доступа по умолчанию позволяет использовать переменную, метод или класс для других классов в том же пакете. Пакет - это набор связанных классов в файловом каталоге. Дополнительные сведения о пакетах см. В разделе о пакетах.

Любая переменная, метод или класс, объявленные для использования модификатора доступа по умолчанию, не могут быть доступны никаким другим классам вне пакета, из которого они были объявлены.

int age; void setNewAge(){ }

Выше приведены некоторые способы использования модификатора доступа по умолчанию для переменной или метода. Не забывайте, модификатор доступа по умолчанию не имеет ключевого слова. Отсутствие трех других модификаторов доступа означает, что вы используете модификатор доступа по умолчанию.

Модификатор защищенного доступа

Модификатор защищенного доступа тесно связан с модификатором доступа по умолчанию. Модификатор защищенного доступа имеет свойства модификатора доступа по умолчанию, но с небольшим улучшением.

Только переменная и метод могут использовать модификатор защищенного доступа. Небольшое улучшение заключается в том, что класс вне пакета классов, из которого была объявлена ​​переменная или метод, может получить доступ к указанной переменной или методу. Однако это возможно ТОЛЬКО в том случае, если он унаследован от класса.

Класс из другого пакета, который может видеть защищенные переменные или методы, должен иметь расширенный класс, создавший переменные или методы.

Обратите внимание, что без преимущества наследования модификатор доступа по умолчанию имеет точно такой же доступ, как и модификатор защищенного доступа.

Примеры использования модификатора защищенного доступа показаны ниже:

protected int age; protected String getName(){ return "My Name is You"; }

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

По умолчанию классы могут иметь только 2 модификатора:

  • общественный
  • без модификатора (модификатор по умолчанию)

Это означает, что классы никогда не могут быть установлены на privateили protected?

Это логично, зачем вам делать приватный класс? Никакой другой класс не сможет его использовать. Но иногда вы можете встроить класс в другой класс. Эти специальные классы inner classesмогут быть закрытыми или защищенными, чтобы к ним мог получить доступ только окружающий его класс:

public class Car { private String brand; private Engine engine; // ... private class Engine { // ... } }

В приведенном выше примере только Carкласс может использовать Engineкласс. Это может быть полезно в некоторых случаях.

Другие классы никогда не могут быть установлены на protectedили private, потому что это не имеет смысла. protectedДоступа модификатора используется , чтобы сделать вещи , package-privateно с возможностью быть доступной для подклассов. В java нет таких понятий, как «подпакеты» или «наследование пакетов».