本帖最后由 mybeta 于 2013-03-16 00:10:07 编辑

解决方案 »

  1.   

    这个例子挺有意思的A b = new B();
    b.doo();不管怎样,通过b这个对象调用了方法,最终调用了被子类覆盖的方法m,它就会选择动态绑定,执行B类中的方法m
      

  2.   

    这是一个向上转型,动态链接的例子,子类的对象赋给一个父类的引用。
    A a = new B();这是一个A类的引用,所以
    a拥有A类的变量和方法。但是对应的是一个B对象,所以它的方法会被重写,但是变量是不能被重写的
    所以假如B重写了A中的方法,将调用B的方法,这就是动态绑定或者叫动态链接。
    例子里B只重写了m()方法 ,b.doo()调用A类的doo方法,调用a类的test,
    涉及到m()时 除非显式的调用父类方法(super.m()),否则调用B的m()。
    所以是B m()
    重写和重载是不同的哦
      

  3.   

    可以显式地指定调用 A 类中的 m 方法:A.this.m();
      

  4.   

    A的m方法被B覆盖了,在B的m方法前面加上@Override会让读者更容易理解
      

  5.   

    B是A的子类,A b=new B()是向上转型