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的默认构造函数,运行A的foo-打印“A :: foo”,而不是运行B的goo,因为它被正确覆盖,但现在B的goo是Anonymous类中的那个,所以它把它转换为B(什么都不做),并运行它的foo,这是B的上面的foo,所以它应该打印“Anonymous:foo”.我有什么问题?
非常感谢.