有关java覆盖和隐藏的疑问

反编译的结果仅能作为参考,而不能得出"JVM在调用非静态字段的时候自动把子类转换为父类类型"的结论,因为编译之后实际上丧失了变量的类型信息,所以反编译时会出现这种别扭的语法。实际上你可以注意到本来是父类引用的,被反编译成了子类引用。而问题的本质在于,Field实际上是没有多态的,也不能被覆盖,只会根据引用类型决定调用子类还是父类的Field。所以父类引用指向子类对象,也只会调用父类的Field。而Method是有多态的。


    推荐阅读