Урок 8

Управление доступом

Вы уже, наверное, неоднократно видели в примерах использование таких ключевых слов, как public и private. Это модификаторы доступа. Сегодня мы рассмотрим для чего они используются.

Очень часто в Java доступ к некоторым членам класса желательно ограничить. Для этого и нужны модификаторы доступа, которые могут присутствовать в объявлении члена класса. Модификатор доступа указывается перед остальной спецификации типа члена, например:

public int i; 
private static double j; 
private int myMethod (int а , char b ) { / / . . .

Существует три модификатора доступа: public, private и protected и четыре уровня доступа:

  1. public (открытый) - когда член объявляется с модификатором доступа public, он становится доступным из любого другого кода.
  2. private (закрытый) - когда член класса объявляется с модификатором доступа private, он доступен только другим членам этого же класса.
  3. protected (защищенный) - применяется только при наследовании.
  4. уровень доступа, предоставляемый по умолчанию - в отсутствие модификатора доступа по умолчанию член класса считается открытым в своем пакете, но недоступным для кода, находящегося за пределами этого пакета.

Ограничение уровня доступа к членам класса - это еще один механизм реализации принципа инкапсуляции. 

Пример 1. Отличие модификаторов

Рассмотрим отличие уровня доступа по умолчанию, public и private на следующем примере. Уровень доступа protected рассмотрим после изучения наследования. В классе Modificators объявлено три переменные с разным уровнем доступа. Внутри самого класса Modificators можно обратится к любой из этих переменных, как показано в методе toString():

package oop;

public class Modificators {
    public int publicVar; // открытый уровень доступа
    private int privateVar; // закрытый уровень доступа
    int defaultVar; // уровень доступа по умолчанию

    public String toString() {
        return "Modificators{"
                + "publicVar=" + publicVar
                + ", privateVar=" + privateVar
                + ", defaultVar=" + defaultVar
                + '}';
    }
}

В классе ModificatorsDemo1, созданном в том же пакете где и класс Modificators, объявляем объект типа Modificators и обращаемся к его public переменной и переменной с уровнем доступа по умолчанию. При попытке обратится к private переменной, возникнет ошибка компиляции - она недоступна извне класса Modificators:

package oop;

public class ModificatorsDemo1 {
    public static void main(String[] args) {
        Modificators object = new Modificators();

        object.defaultVar = 10;
        object.publicVar = 20;
        //object.privateVar = 100; // Ошибка компиляции!
    }
}

Создадим класс похожий на ModificatorsDemo1, но в другом пакете. В этом классе мы точно также не можем обратится к private переменной, но теперь и переменная с уровнем доступа по умолчанию тоже недоступна:

package oop.p2;

import oop.Modificators;

public class ModificatorsDemo2 {
    public static void main(String[] args) {
        Modificators object = new Modificators();

        //object.defaultVar = 10;// Ошибка компиляции!
        object.publicVar = 20;
        //object.privateVar = 100; // Ошибка компиляции!
    }
}



0 Comments
Leave your comment: