JVM就是这么设计的。JVM会持有一个类的所有方法的列表,对Class C 他实际有
B. say()和C.say()两个方法。在执行过程中,JVM会根据对象的实际类型,选择适当的方法去调用。调用哪个方法是由JVM决定的,和内存没有关系。
对象是C的实例就调用C.say(),是B的实例就调用B.say();如果C没有重写say()方法,那么B.say()就是适当的方法。因为是在执行的时候才决定到底调用哪个方法的所以叫做动态绑定。
假如C和B都有一个int i 的变量的话,编译的时候,访问的变量的内存位置就确定了,对象使用B声明就会访问到B的变量,所以变量是静态绑定。