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工厂类中根据运行时的情况再确定。 而在编译期时是不知道的。可以用这个例子来理解动态绑定的意义所在。