多态
1、子类型转换成父类型,称为向上机制/upcasting,或者称为自动类型转换 2、java语法:父类型引用指向子类型对象 3、java程序永远都分为编译阶段和运行阶段 4、先分析编译阶段,再分析运行阶段,编译无法通过,也无法运行 5、 Animal a2=new Cat(); a2.move(); 编译阶段编译器检查a2这个引用数据类型为animal,由于animal.class字节码当中有move方法,所以编译通过,这个过程称为静态绑定,编译阶段绑定,只有静态绑定成功之后才会有后续的运行。。 在程序运行阶段,jvm堆内存当中真实创建的对象是cat对象,name在运行中移动会调用cat对象的move方法,此时发送了动态绑定,运行阶段绑定。 无论是cat类有没有重写move方法,运行阶段移动调用的是cat对象的move方法,因为底层真实对象是cat对象。 父类型引用指向子类型对象这种机制导致程序存在编译阶段绑定和运行阶段绑定两种不同的形态/状态,这种机制可以成为多态语法机制 6、 a2.catchMouse(); 不能调用,因为a2类型是animal类型,由于animal.class字节码当中没有catchMouse方法,所以编译不通过,静态绑定失败 7、以上问题怎么办? a2是无法直接调用,因为a2类型是animal类型,animal