Учитывая следующий родительский класс:
public class AbstractParent<T> {
abstract protected void doSomething();
}
и следующий дочерний класс:
public class DelegatingChildClass<T,U> extends AbstractParent<T> {
AbstractParent<U> delegate;
public DelegatingChildClass(AbstractParent<U> delegate) {
this.delegate = delegate;
}
@Override
protected void doSomething() {
delegate.doSomething();//<--- Problem line
}
}
Мое понимание защищенных методов заключается в том, что доступ ограничен:
- классы в том же пакете, что и декларирующий класс
- классы, расширяющие декларирующий класс
Поскольку DelegatingChildClass расширяет AbstractParent, я ожидаю, что метод doSomething () делегата будетбыть доступным.Однако компилятор жалуется на это, имея защищенный доступ.Это ошибка компилятора?Или я неправильно понимаю, как должен работать модификатор защищенного доступа?