在Java中,当你调用一个方法时,可能会在编译时期解析,也可能实在运行时期解析,这全取决于究竟是一个静态方法仍是一个虚方法。若是是在编译时期解析,那么就称之为静态绑定,若是方法的调用是在运行时期解析,那就是动态绑定或者延迟绑定。html
Java是一门面向对象的编程语言,优点就在于支持多态。多态使得父类型的引用变量能够引用子类型的对象。若是调用子类型对象的一个虚方法(非private,final or static),编译器将没法找到真正须要调用的方法,由于它多是定义在父类型中的方法,也多是在子类型中被重写(override)的方法,这种情形,只能在运行时进行解析,由于只有在运行时期,才能明确具体的对象究竟是什么。这也是咱们俗称的运行时或动态绑定(runtime or dynamic binding)。另外一方面,private static和final方法将在编译时解析,由于编译器知道它们不能被重写,全部可能的方法都被定义在了一个类中,这些方法只能经过此类的引用变量进行调用。这叫作静态绑定或编译时绑定(static or compile time binding)。全部的private,static和final方法都经过静态绑定进行解析。这两个概念的关系,与“方法重载”(overloading,静态绑定)和“方法重写”(overriding,动态绑定)相似。动态绑定只有在重写可能存在时才会用到,而重载的方法在编译时期便可肯定(这是由于它们老是定义在同一个类里面) 编程
参考博客:编程语言
http://www.importnew.com/14338.htmlide
http://www.cnblogs.com/ShaneZhang/p/4972550.htmlspa