Java的动态/静态绑定是比较偏门的知识点之一,可能你不经常听到,但是关于他们的应用,有Java开发经验的朋友应该看一眼就明白。
静态绑定
先说静态绑定。所谓静态绑定,既是说方法的实现在编译期就已经确定了的。这么一说,马上能想到的就是静态方法。没错,只有静态方法是属于静态绑定,或者称之为前期绑定。而对象方法则是在运行期绑定的。
动态绑定
对于动态绑定,或者叫运行期绑定,说的是在编译期不知道实现的是哪个具体的对象,直到运行期才能确定。让我们来举个例子。
class Drinks{ public void drink(){ System.out.println("not sure what it is"); } public static void main(String []args){ Drinks drink = DrinkFactory.getDrink(); drink.drink(); }}class DrinkFactory { public static Drinks getDrink() { return new Tea(); }}class Tea extends Drinks{//overriding the static method public void drink(){ System.out.println("this is Tea"); }}class Water extends Drinks{//overriding the static method public void drink(){ System.out.println("this is Water"); }}
非常简单的一个例子,用的是我们经常见到的工厂模式,具体的实现类型可以在DrinkFactory工厂类中根据运行时的情况再确定。而在编译期时是不知道的。可以用这个例子来理解动态绑定的意义所在。