Ответ
Модификаторы доступа в Java определяют область видимости (доступность) классов, методов и полей.
| Модификатор | Видимость внутри класса | Видимость внутри пакета | Видимость для наследников (вне пакета) | Видимость везде |
|---|---|---|---|---|
private |
Да | Нет | Нет | Нет |
| (по умолчанию) | Да | Да | Нет | Нет |
protected |
Да | Да | Да | Нет |
public |
Да | Да | Да | Да |
Пример и пояснение:
package com.example;
public class AccessExample {
private String secret = "visible only inside AccessExample"; // Наиболее строгий
String packagePrivate = "visible within com.example package";
protected String forSubclasses = "visible in package and to subclasses";
public String api = "visible to everyone"; // Наиболее открытый
public void method() {
System.out.println(secret); // OK: доступ внутри класса
}
}
// В другом пакете
package com.other;
import com.example.AccessExample;
class OtherClass {
void test() {
AccessExample obj = new AccessExample();
// obj.secret; // Ошибка компиляции: private
// obj.packagePrivate; // Ошибка: доступ только в пакете com.example
// obj.forSubclasses; // Ошибка: не наследник и не в том же пакете
System.out.println(obj.api); // OK: public
}
}
Выбор модификатора — ключевой элемент инкапсуляции, позволяющий скрывать внутреннюю реализацию и предоставлять чёткий API.