动态绑定和静态绑定

269 阅读1分钟
原文链接: mp.weixin.qq.com

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