
private - доступ к свойству/методу только внутри того класса, в котором он объявлен.
protected - доступ к свойству/методу внутри того класса, в котором он объявлен, а также из классов-наследников, независимо от того, в каком пакете они находятся.
default - доступ к свойству/методу внутри того класса, в котором он объявлен, а также из классов и классов-наследников того же пакета.
default – это область вызова, а не модификатор доступа. Т.о. областей видимости четыре, а модификаторов три.
Все классы, интерфейсы и enum верхнего уровня (не вложенные в другие типы) могут иметь область видимости только public или пакетную (default). Внешний класс не может быть private или protected, это приводит к ошибке компиляции. Вложенные и внутренние типы могут иметь любой модификатор доступа.
public class Outer {
private static class InnerOne {}
protected class InnerTwo {}
private interface InnerInterface {}
}
Интерфейсы верхнего уровня могут объявляться только с двумя модификаторами (не-доступа): abstract и strictfp.⚹Модификатор strictfp гарантирует, что результаты вычислений с плавающей точкой будут одинаковыми на всех платформах.