单分派和多分派
变量被声明时的类型叫做变量的静态类型(Static Type),变量所引用的对象的真实类型又叫做变量的实际类型(Actual Type)。
静态分派(StaticDispatch)发生在编译时期,分派根据静态类型信息发生。方法重载(Overloading)就是静态分派。
动态分派(DynamicDispatch)发生在运行时期,动态分派动态的置换掉某个方法。动态分派实现方法置换产生的多态性。
分派的类型
一个方法所属的对象叫做方法的接收者,方法的接收者和方法的参量(方法名、方法的参数签名(包括参数类型、参数个数、参数顺序))
统称为方法的宗量。
根据方法可以基于多少种宗量,可以将面向对象语言划分为单分派(Uni-Dispatch)和多分派(Multi-Dispatch)语言。单分派语言根据一个
宗量的类型进行对方法的选择。多分派语言根据多于一个宗量类型对方法进行选择。
在一个支持动态单分派的语言里,有两个条件决定了一个请求会调用哪一个操作,一是请求的名字,二是接收者的真实类型。单分派限制了方
法的选择过程,使得只有一个宗量可以被考虑,这个宗量通常就是方法的接收者。在Java语言中,如果一个操作时作用于某个类型不明的对象上面
的,那么对这个对象的真实类型测试仅会发生一次,这就是动态单分派的特性。
所以java支持静态的多分派和动态的单分派。