静态绑定:编译器可以确定的。privaate方法、static方法、final方法都是静态绑定的。
动态绑定:运行期确定的。对象方法就是动态绑定的。
静态绑定例子:
class B
{
private void bp() {}
public static void b()
{
System.out.println("b");
}
}
public class A extends B
{
public void bp()
{
System.out.println("调用不到,静态绑定的效果");
}
public static void b()
{
System.out.println("a");
}
public static void main(String[] args)
{
B b = new A();
b.bp();
b.b();
}
}
可以肯定的是static方法是静态绑定的,编译期JVM就知道是B类型的对象调用的方法是B类中的方法,所以b.b()调用的是父类中的方法。
又因为静态绑定确定bp()方法是父类B类中的方法,所以在子类的多态环境下访问父类中private权限的方法是访问不到的,但是Jvm又知道这里调用的这个方法是属于父类B的,所以就出错了。这一条是我我本人的理解,不知道对不对。