Перечислите модификаторы доступа в Java в порядке увеличения видимости.

«Перечислите модификаторы доступа в Java в порядке увеличения видимости.» — вопрос из категории Java Core, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Модификаторы доступа в Java, от самого строгого к самому открытому:

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

Пример и область видимости:

package com.example;

public class AccessExample {
    private String secret = "only here";          // Только внутри AccessExample
    String packagePrivate = "same package";       // Для всех классов в com.example
    protected String forSubclasses = "package + kids"; // com.example + наследники
    public String openToWorld = "everywhere";     // Отовсюду
}

package com.other;
import com.example.AccessExample;

class OtherPackageClass {
    void test() {
        AccessExample obj = new AccessExample();
        // obj.secret;          // Ошибка компиляции: private
        // obj.packagePrivate;  // Ошибка: default (разные пакеты)
        // obj.forSubclasses;   // Ошибка: не наследник и другой пакет
        System.out.println(obj.openToWorld); // OK: public
    }
}