这个 在thinking in java 的 多态 还是哪章讲到了
你可以自己看看
那里还是讲的比较清楚的了

解决方案 »

  1.   

    方法如果没有加上final/static/private,那么它在编译器编译时是动态绑定的(有点像C++的虚拟指针)
        虚拟机在程序运行时,自动根据对象的类型来选择运行的方法
            正如:A b=new B();
                  b.p();       //b实际为B的对象,所以运行的是B中的P()类中的属性,以及加上final/static/private修饰符的方法,在编译时都是静态绑定的
        A b=new B();    
        System.out.println(b.i); // 输出A中的i
      

  2.   

    凤凰说
    方法如果没有加上final/static/private,那么它在编译器编译时是动态绑定的(有点像C++的虚拟指针)
        虚拟机在程序运行时,自动根据对象的类型来选择运行的方法
            正如:A b=new B();
                  b.p();       //b实际为B的对象,所以运行的是B中的P()
    ————————————————
    但是当B没有对A的p()覆盖的时候,那么调用的p(),我发现输出的i是A的i
      

  3.   

    这篇里面的代码是我记忆写的
    有些错误
    我在http://community.csdn.net/Expert/topic/3883/3883904.xml?temp=.6487696这里改正了
    请大家来这个回答。
      

  4.   

    //但是当B没有对A的p()覆盖的时候,那么调用的p(),我发现输出的i是A的i------------------------------------------------------------------------
        如果没有覆盖,那么b绑定的将是父类的P()。当然父类p()输出的就是父类的i喽