public class PrivateOverride
{
private void f(){
System.out.println("private f()");
}
public static void main(String [] args)
{
PrivateOverride po=new Derived();
po.f();
}
}
class Derived extends PrivateOverride
{
public void f(){
System.out.println("public f()");
}
}
因为private voidf(){}而private 隐式地申明为final 所以po.f();这一调用与private void f(){}在编译的时候就绑定了,所以就会调用private void f(){};
而如果将 private 更改为public ,因为class Derived extends privateOverride{}中也有一个public void f(){},就会造成重载.会造成运行时的动态绑定(即将po.f()与
Class Derived 中的public void f(){}绑定.),所以会调用class Derived中的public void f(){}.
终于搞明白了.
又进了一小步.
hooooo!!
继续加油!!