Вопрос проверяет глубокое понимание модификаторов доступа и правил видимости в Java.
protected и package-private отличаются областью видимости. Package-private доступен только внутри одного пакета. protected дополнительно открывает доступ для наследников, даже если они находятся в другом пакете. Это различие важно при проектировании иерархий классов.
В Java существует четыре уровня доступа, и различие между protected и package-private часто вызывает вопросы.
Определение:
Package-private — это уровень доступа по умолчанию, когда модификатор не указан.
Особенности:
доступен только внутри одного пакета
недоступен классам из других пакетов
недоступен наследникам из других пакетов
class UserService {
void process() {
// доступен только в этом пакете
}
}
Определение:protected — это уровень доступа, который расширяет package-private, добавляя доступ для наследников.
Особенности:
доступен внутри пакета
доступен наследникам из других пакетов
часто используется в базовых классах
public class BaseService {
protected void log() {
}
}
Основное отличие заключается в наследовании:
package-private не работает за пределами пакета
protected работает для extends, даже если класс в другом пакете
protected используют, когда нужно открыть доступ наследникам, а package-private — для внутренней логики пакета. Осознанный выбор модификатора повышает качество архитектуры.