Java之静态绑定和动态绑定

概念

  • 程序绑定:绑定指的是一个方法的调用与方法所在的类(方法主体)关联起来,Java中绑定分为绑定分为 静态绑定动态绑定
  • 动态绑定:在面向过程中又称为后期绑定,在程序运行期进行了绑定,根据实际情况有选择的进行绑定
  • 静态绑定:在面向过程中又称为前期绑定,在程序编译期进行了绑定,即在还没运行时,就已经加载到内存

    对比

  • 动态绑定
    • 又称为后期绑定
    • 发生在运行时期
    • 虚方法(可以被子类重写的方法)会根据运行时的对象进行动态绑定
    • 动态绑定使用对象信息来完成
    • 典型应用是方法的重写(Override)
  • 静态绑定
    • 又称为前期绑定
    • 发生在编译时期
    • 使用private或static或final修饰的变量或者方法(包括构造方法)
    • 静态绑定使用类信息来完成
    • 典型应用是方法重载(Overload)

Java重载匹配优先级

前情提要

Java面向对象的三个基本特征:继承、封装和多态;多态主要体现在重载和重写;

示例代码

无意间看到这样一个问题,为了方便直观,就用代码来描述问题,有这样一个类:

public class OverloadPriority {

    public static void print(Object arg) {
        System.out.println("parameter type = Object");
    }

    public static void print(int arg) {
        System.out.println("parameter type = int");
    }

    public static void print(long arg) {
        System.out.println("parameter type = long");
    }

    public static void print(double arg) {
        System.out.println("parameter type = double");
    }

    public static void print(float arg) {
        System.out.println("parameter type = float");
    }

    public static void print(char arg) {
        System.out.println("parameter type = char");
    }

    public static void print(Character arg) {
        System.out.println("parameter type = Character");
    }

    public static void print(char... arg) {
        System.out.println("parameter type = char...");
    }

    public static void print(Serializable arg) {
        System.out.println("parameter type = Serializable");
    }

    public static void print(Comparable<?> arg) {
        System.out.println("parameter type = Comparable");
    }

    public static void main(String[] args) {
        // int
        print('g');
    }

}
,