编译阶段看前面部分的变量声明,执行阶段看后面部分生成的对象;
比如cat继承animal;animal里面有一个move方法,有以下代码:
animal a =new cat();
a.move;
编译阶段,计算机看前面的类型引用,也就是查看animal的animal.class文件里面是否有move方法,有的话就编译通过,没有就报错。
运行阶段,因为计算机底层创建的是cat对象,所以使用的是cat的方法。如果cat重写了move方法,就用cat重写之后的方法,如果没重写,就拿cat继承于animal的move方法。总之就是用cat的方法。
总结:
编译用等号左边的数据类型,运行用等号右边的对象!