绑定
绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,绑定分为静态绑定(前期绑定) 和 动态绑定(后期绑定)
静态绑定(前期绑定)
静态绑定指的是在程序执行前就已经被绑定(编译过程就确定调用方法所属类)。
注意:Java中,只有final、static、private 和 构造方法 是静态绑定
- final : final修饰的方法可以被子类继承,但是不能被重写。子类也不能增加一个和父类final修饰一样的方法(编译会报错)。所以子类虽然可以调用该final修饰的方法,但其实调用的也是父类定义的final方法。因此使用final修饰的方法可以有效地关闭java的动态绑定
- static:static修饰的方法可以被继承,但是不能被重写。虽然子类可以新建一个和父类定义为static方法一摸一样的方法。但是使用起来会有区别,子类对象上转型为父类对象时,不论子类有没有定义那个static方法,该对象调用的都是父类的静态方法。所以static修饰的方法在编译时就可以确定调用方法属于哪个类,也就是可以进行静态绑定
- private:private修饰的方法不能被继承,既然不能被子类进行操作,想调用这个private方法,只能通过这个类自身的对象,所以private修饰的方法在编译时就可以进行静态绑定
- 构造方法:这个就不解释了,构造方法是每个类独有的方法,所以肯定编译的时候就可以进行静态绑定
动态绑定(后期绑定)
动态绑定指定的是在运行时再决定这个方法由哪个对象调,这个过程就被成为动态绑定
动态绑定的过程:
- JVM寻找对象实际类型的方法表
- JVM搜索方法签名
- 调用方法
参考链接: