能否详细解释为什么打印的是A,而不是B
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方法和域是不被继承的。
那么此时的子类B中所具有的方法有:A.f(),B.fun()这两个。
而当你实例化B后调用f()函数,而f()里又调用了fun();
但此时编译器知道fun()是private的,
那么他直接静态绑定了父类中的fun()方法。
此时并不存在多态问题
[解决办法]