class A{
private void fun(){
System.out.println("A");

public void f(){
this.fun();

}
}
class B extends A{
public void fun(){
System.out.println("B");
}
}public class TestOverride { public static void main(String[] args) {
B b = new B();
b.f();

}}

解决方案 »

  1.   

    因为类B继承与类A,它们有共同的方法“void fun()”,但类B没有方法“void f()”而类A有,所以会默认调用类A的方法“void f()”
      

  2.   


    而 “void f()”中的语句“this.fun()”则执行了A的方法“void fun()”
      

  3.   

    你的a中fun是private 的,也就是说fun没有重写的概念,没有多态的概念你把private改掉就知道了
      

  4.   

    继承中的方法覆写问题。现在B类(当前对象所在类中)寻找方法void f(),如果没有就会去其父类(此处为A类)中查找,直到找到对应的方法为止,所以就调用父类中的方法,打印出来A
      

  5.   

    为什么不是执行B的void fun(),这里的this相当与b对象
      

  6.   

    如3楼所说,并没有多态的存在,不要被f()里面的this给迷惑了
      

  7.   

    父类中的private方法和域是不被继承的。
    那么此时的子类B中所具有的方法有:A.f(),B.fun()这两个。
    而当你实例化B后调用f()函数,而f()里又调用了fun();
    但此时编译器知道fun()是private的,
    那么他直接静态绑定了父类中的fun()方法。
    此时并不存在多态问题
      

  8.   


    如果你把ptivate去掉就会是b了 这种私有的 子类根本不知道里面有这个方法。如果建立b的对象在你调用方法时  他会先看看子类里有没有这个方法,如果没有就会默认的调用父类的方法,,问题就出在了private上面。你试一下就知道了 。。或多做两个这样的题就明白了。。
      

  9.   

    因为父类A里的fun()并没用被子类B的fun()给重写
      

  10.   

    因为在main方法中调用的是b.f();
    而且在f()中没有B类中的输出,所以只会输出A
      

  11.   

        java中的变量是静态绑定的,方法的话只有static和final(所有private默认是final的)是静态绑定的. 
    你所说的 父类中的this 是指 子类的引用(可以打印试试,属于动态绑定,在运行是查找执行),此处是private,所以属于静态绑定,
    我感觉你只考虑到了多态,但没有考虑到静态绑定。所以疑惑,,个人的见解,供你参考!!!!
      

  12.   

    java中的变量都是静态绑定的,方法的话只有static和final(所有private默认是final的)是静态绑定的.