静态绑定:静态绑定又称前期绑定,即在程序执行前方法已经被绑定,此时由编译器或其它连接程序实现。针对java简单的可以理解为程序编译期的绑定;这里特别说明一点,java当中的方法只有final,static,private和构造方法是前期绑定。
动态绑定:动态绑定又称后期绑定,在运行时根据具体对象的类型进行绑定。在java中,几乎所有的方法都是后期绑定的,在运行时动态绑定方法属于子类还是基类。但是也有特殊,针对static方法和final方法由于不能被继承,因此在编译时就可以确定他们的值,他们是属于前期绑定的。特别说明的一点是,private声明的方法和成员变量不能被子类继承,所有的private方法都被隐式的指定为final的(由此我们也可以知道:将方法声明为final类型的一是为了防止方法被覆盖,二是为了有效的关闭java中的动态绑定)。java中的后期绑定是有JVM来实现的,我们不用去显式的声明它。
动态绑定的过程:虚拟机提取对象的实际类型的方法表,虚拟机搜索方法签名,调用对应方法。
实际上就是视频说的那样编译和运行都参考左边的就是静态绑定,编译时参考左边的,运行时参考右边的肯定是动态绑定。动态绑定要么继承要么实现。 |