8.3.2 分派
/*** @author study* @version 1.0* 方法静态分派演示* @date 2021/6/24 16:43*/public class StaticDispatch {static abstract class Human{}static class Man extends Human{}static class Woman extends Human{}public void sayHello(Human guy){System.out.println("hello,guy!");}public void sayHello(Man guy){System.out.println("hello,lentleman!");}public void sayHello(Woman guy){System.out.println("hello,lady!");}public static void main(String[] args) {Human man =new Man();Human woman = new Woman();final StaticDispatch sr = new StaticDispatch();sr.sayHello(man);//hello,guy!sr.sayHello(woman);//hello,guy!}}
虚拟机为何选择执行参数类型为Human作为重载?
Human man = new Man();我们把上面代码中的“Human”称为变量的“静态类型”或者叫做“外观类型”。后面的”Man” 则称为变量的实际类型或者叫做“运行时类型”。静态类型和实际类型在程序中都可能会发生变化,区别是静态类型的变化仅仅在使用时发生,变量本身的静态类型不会改变,并且最终的静态类型是在编译器可知的;而实际类型变化的结果在运行期才可确定,编译器在编程程序的时候并不知道一个对象实际类型是什么。
