Junior — Middle
63
Какое отличие между модификаторами доступа protected и package-private (default) в языке Java?
Ответ от нейросети
sobes.tech AI
В Java модификатор доступа protected и пакетный (package-private, или default, когда модификатор не указан) имеют разные уровни видимости:
- package-private (default): доступ разрешён только классам из того же пакета.
- protected: доступ разрешён классам из того же пакета и подклассам (даже если они находятся в другом пакете).
То есть protected расширяет доступ по сравнению с package-private, позволяя наследникам из других пакетов обращаться к защищённым членам.
Пример:
package pkg1;
public class Parent {
int defaultVar; // package-private
protected int protectedVar;
}
package pkg1;
public class SamePackage {
void test() {
Parent p = new Parent();
int a = p.defaultVar; // доступ есть
int b = p.protectedVar; // доступ есть
}
}
package pkg2;
import pkg1.Parent;
public class Child extends Parent {
void test() {
int a = defaultVar; // нет доступа (package-private)
int b = protectedVar; // доступ есть (protected + наследование)
}
}
package pkg2;
import pkg1.Parent;
public class Other {
void test() {
Parent p = new Parent();
int a = p.defaultVar; // нет доступа
int b = p.protectedVar; // нет доступа (не наследник)
}
}
Таким образом, protected даёт доступ наследникам вне пакета, а package-private — только внутри пакета.