(一)程序绑定:
静态绑定: java静态绑定主要是编译期绑定,主要是指被关键字final,static,private修饰的语句和构造方法。
动态绑定:在运行期间判断对象的类型,并分别调用适当的方法。
(二)子父类的成员情况
Father f = new Child();
我们知道Java文件编译后,生成字节码文件。编译期主要检查语法,并不执行程序,并不会产生对象。 Java支持多态机制,所以上述等式编译可以通过。这时确定的 f 只是Father 的类型,与子类对象未发生关联。 当程序运行并且使用动态绑定调用方法时,虚拟机必须调用同 f 所指向的对象的实际类型相匹配的方法版本。 ① 如果能在声明类型中匹配到方法签名完全一样(参数类型一致)的方法,那么这个方法是最合适的。 ② 在第①条不能满足的情况下,通过将参数类型进行自动转型之后再进行匹配。如果匹配到多个自动转型后的方法签名M(A)和M(B),则用下面的标准来确定合适的方法:传递给M(A)方法的参数都可以传递给M(B),则f(A)最合适。反之M(B)最合适。 ③ 如果仍然在声明类型中找不到“合适”的方法,则编译阶段就无法通过。