因为b是a的子类。a = (classA)b;
就应该相当于
classA a = new classB();
这样调用a.print()的时候,
编译器会先从子类寻找这个方法。

解决方案 »

  1.   

    这可是很经典的多态实现啊!子类override了父类的方法,所以,通过父类应用调用的实际上是子类的方法。你可以down《Java Pitfalls》,其中的第一个条款就是在讲override。如果你学了C++,了解了虚函数,你就会对其中运作的方式清清楚楚了。
      

  2.   

    and method can override,but field can't:)
      

  3.   

    呵呵!还有一个:class A{
      A(){
        String a = "A";
        System.out.println(a);
      }
    }class B extends A{
       static String a="B";
       B(){
        System.out.print(a);
       }
       static void main(String args[]){
         new B();
       }
    }