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();
}}
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();
}}
而 “void f()”中的语句“this.fun()”则执行了A的方法“void fun()”
那么此时的子类B中所具有的方法有:A.f(),B.fun()这两个。
而当你实例化B后调用f()函数,而f()里又调用了fun();
但此时编译器知道fun()是private的,
那么他直接静态绑定了父类中的fun()方法。
此时并不存在多态问题
如果你把ptivate去掉就会是b了 这种私有的 子类根本不知道里面有这个方法。如果建立b的对象在你调用方法时 他会先看看子类里有没有这个方法,如果没有就会默认的调用父类的方法,,问题就出在了private上面。你试一下就知道了 。。或多做两个这样的题就明白了。。
而且在f()中没有B类中的输出,所以只会输出A
你所说的 父类中的this 是指 子类的引用(可以打印试试,属于动态绑定,在运行是查找执行),此处是private,所以属于静态绑定,
我感觉你只考虑到了多态,但没有考虑到静态绑定。所以疑惑,,个人的见解,供你参考!!!!