多态中父类引用指向子类对象,在编译的时候编译器是找父类的方法,运行时是使用子类的方法
Animal a = new Cat();
a.eat();在编译的时候是找父类有没有eat方法,在运行的时候是找子类(猫类)中的eat方法,这个是动态的
如果父类中没有,那就属于子类特有的方法,你用a.catchMouse()时,因为父类没有这个方法,编译时时看父类,所以编译报错;
如果对a进行强制转换成Cat类后就不会出现编译错误了,是因为你告诉了编译器这是一个Cat类,那编译的时候它就会去找子类中有没有这个方法
Cat b=(Cat)a;
b.catchMouse();这样就没有错误了,和内存没啥关系,主要是多态中,编译和运行是分开的,编译找父类,运行找子类 |