把第一个输出改为System.out.println(((Subclass)b).x);就输出为3了。由于超类并没有把基类的同名域给覆盖掉。而多态仅仅是同名方法的调用。

解决方案 »

  1.   

    Base b = new Subclass();  这样b的成员变量来自于Base  b的方法去执行Subclass的方法
      

  2.   

    好像是 b的成员变量来自于Base  b的方法去执行Subclass的方法
    这个能否讲的清楚一点
      

  3.   

    第二个输出是3,因为你b的类型虽然是父类,但是子类override了父类的方法,就形成了个最简单的多态,所以调用子类方法。而第一个输出是2,因为method有override这种说法,而field就没有了,field要看你具体调用的那个instance在声明的时候是什么类型的,就按照那个类型来调用field