解决方案 »

  1.   

    个人浅见:
    楼主这个程序有3个特殊地方, 1是静态内部类与其外围类子类同名;2是外围类子类的子类又隐藏了父类的静态方法;3 是试图在子类里操作父类的隐藏的静态方法。
    这里的静态内部类是:B, 外围类是 A, 外围类子类是 B, 外围类子类的子类是 C.我测试了,这种情况是没有办法实现的。
    要么把静态内部类换名, 要么不要在C类里隐藏其父类B的静态方法(或者说给C的方法f() 换个名字。
      

  2.   

    看来这种情况真的没办法了。
    只是很奇怪java对于这种命名冲突竟然不报错也没警告,要是A.B中也有个f()那这种错误就不好发现了
      

  3.   

    额,把test方法的static修饰符去掉,把B.f() 改成super.f();