Конечно сегодня не пятница, но...
Что будет результатом компиляции/выполнения данной программы и почему?
UPDATE:
Для тех, кому всё понятно, объясните, почему вот это работает по-другому:
UPDATE2:
Итак, из класса Bar таки есть доступ к Foo.foo(). http://community.livejournal.com/ru_java/806380.html?view=10338028#t10338028
UPDATE3:
Как обнаружил
aefimov, через рефлекшен ничего не работает:
выдаёт
А это уже бага в рефлекшене:
Bug ID: 4071957 (reflect) Method.invoke access control does not understand inner class scoping
class Foo {
private void foo() {
System.out.println("qwe");
}
static class Bar extends Foo {
void bar() {
this.foo();
}
}
public static void main(String[] args) {
new Bar().bar();
}
}
UPDATE:
Для тех, кому всё понятно, объясните, почему вот это работает по-другому:
class Foo {
private Foo() {
}
static class Bar extends Foo {
}
public static void main(String[] args) {
new Bar();
}
}
UPDATE2:
Итак, из класса Bar таки есть доступ к Foo.foo(). http://community.livejournal.com/ru_java/806380.html?view=10338028#t10338028
class Foo {
private void foo() {
System.out.println("qwe");
}
static class Bar extends Foo {
void bar() {
super.foo();
}
}
public static void main(String[] args) {
new Bar().bar();
}
}
UPDATE3:
Как обнаружил
Foo.class.getDeclaredMethod("foo").invoke(this);
выдаёт
Class Foo$Bar can not access a member of class Foo with modifiers "private"
А это уже бага в рефлекшене:
Bug ID: 4071957 (reflect) Method.invoke access control does not understand inner class scoping
