编译和运行的划分
编译期是指 代码编译成字节码的过程(不是写代码的过程)
运行期是指 类字节码被加载进内存(从静态结构转换为内存运行结构)的过程
两种多态的具体实现
编译期多态是指方法重载,运行期多态是指方法重写和向上(下)转型
那么为什么说方法重载是编译期多态呢?
因为调用哪个方法在编译成字节码的时候,是可以根据参数类型、参数个数就确定下来的。
又为什么说方法重写、向上转型是运行时多态呢?
因为向上转型中,方法的调用涉及到了方法重写,此时需要先去父类中找到该方法,然后再去判断子类是否重写了该方法,如果子类重写了该方法,那么就会调用子类的方法
示例代码如下:
Father A = new Son();
A.do();
此时上面的代码在编译期,并不知道调用 Father 的do()方法,还是调用 Son 的 do() 方法。因为向上转型的方法调用是先去父类找该方法,再判断是否重写了该方法,如果重写了就调用子类的重写方法。而编译期间没有做这一步判断。