Есть ли у супер более высокий приоритет, чем внешний класс?
Рассмотрим три класса:
- ClassA
- ClassB
- Анонимный класс в ClassB, который расширяет ClassA
ClassA.java:
public class ClassA {
protected String var = "A Var";
public void foo() {
System.out.println("A foo()");
}
}
ClassB.java:
public class ClassB {
private String var = "B Var";
public void test() {
new ClassA() {
public void test() {
foo();
System.out.println(var);
}
}.test();
}
public void foo() {
System.out.println("B foo()");
}
}
Когда я вызываю new ClassB().test()
, я получаю следующий вывод (который в значительной степени ожидается):
A foo()
A Var
Вопрос: Определяется ли это где-то, что внутренний класс принимает (методы и члены) сначала из суперкласса, а затем из внешнего класса или зависит от реализации реализации компилятора JVM? Я просмотрел JLS (§15.12.3), но не смог найти ссылки на это, возможно, это указано там, но я неправильно понял некоторые термины?