Я не уверен, что понимаю ваш вопрос.Этот код выполняется просто отлично:
interface SomeInterface {
public void interfaceMethod();
}
class Parent {
private void doSomething() { System.out.println("hello world"); }
protected void aProtectedMethod() { doSomething(); }
}
class Child extends Parent {
public static void main(String... args) {
new Child().anotherMethod();
}
void anotherMethod() {
new SomeInterface() {
public void interfaceMethod() {
aProtectedMethod(); // line A
}
}.interfaceMethod();
}
}
(печатает hello world
, как и ожидалось.)
Однако вас может смущать то, что в строке A (см. Код выше), *Ссылка 1007 * фактически ссылается на экземпляр объекта типа SomeInterface
, а не на Child
, что может объяснить, почему у вас возникают проблемы с вызовом aProtectedMethod
.Вы можете получить доступ к ссылкам на Child
s, написав Child.this
.
Из документации по IllegalAccessException:
При попытке приложения выдается исключение IllegalAccessExceptionдля рефлексивного создания экземпляра (кроме массива), установки или получения поля или вызова метода, но исполняемый в настоящее время метод не имеет доступа к определению указанного класса, поля, метода или конструктора.
Используете ли вы API отражения?