JVM学习三:静态分派

时间:2023-03-08 17:47:03

  所有依赖静态类型来定位方法的执行版本的分派动作成为静态分派,静态分派典型的应用场景是方法的重载。在编译阶段,javac编译器会根据参数的静态类型决定使用哪个重载版本,但很多种情况下这个版本并不是“唯一的”,往往只能确定一个“更加合适的”版本。

public class Main {
public static void sayHello(Object arg) {
System.out.println("hello object");
} public static void sayHello(int arg) {
System.out.println("hello int");
} public static void sayHello(long arg) {
System.out.println("hello long");
} public static void sayHello(Character arg) {
System.out.println("hello Character");
} public static void sayHello(char arg) {
System.out.println("hello char");
} public static void sayHello(char... arg) {
System.out.println("hello char...");
} public static void sayHello(Serializable arg) {
System.out.println("hello Serializable");
} public static void main(String[] args) {
sayHello('c');
}
}

  方法重载的优先级为:

hello char
hello int
hello long
hello Character
hello Serializable
hello Object
hello char...

  之所以会匹配到Serializable是因为它是Character实现的一个接口,由上可见变长参数的重载优先级是最低的。