public class A {
public A() {
foo();
}
private void foo() {
System.out.print("A::foo ");
goo();
}
public void goo() {
System.out.print("A::goo ");
}
}
public class B extends A {
public B() {
foo();
}
public void foo() {
System.out.print("B::foo ");
}
public void goo() {
System.out.print("B::goo ");
}
public static void main(String[] args) {
A b = new B() {
public void foo() {System.out.print("Anonymous::foo ");}
public void goo() {((B)this).foo();}
};
}
}
Мне нужна ваша помощь с пониманием, почему программа печатает A::foo Anonymous::foo Anonymous::foo
. Этот анонимный класс заменяет прежний B? переопределяет свои методы?
Как я понимаю, он должен перейти к конструктору A по умолчанию, запустить foo-print A "A :: foo", чем запустить goo B, поскольку он был правильно переопределен, но теперь goo B - это тот, который в классе Anonymous , так что он приводит это к B (который ничего не делает) и запускает свой foo, который является foo выше, для B, поэтому он должен вывести «Anonymous: foo». Что я делаю не так?
Большое спасибо.