java想问一下关于多态的知识点 如图 为啥换成Cat不行 Animal就可以

题主的问题是关于对象转型的问题。testAnimalVoice(Cat c);方法可接受的参数类型是:Cat类型或者其子类的类型的变量。而变量a是Animal类型,所以不能自动转换成Cat类型,要想成立需要强制类型转换。
强制类型转换在内存中所发生的变化如下图:
Animal a = new Cat();Cat a2 = (Cat)a;java想问一下关于多态的知识点 如图 为啥换成Cat不行 Animal就可以

解释:
Animal a = new Cat();
虽然a指向Cat对象,但真真实实看得到的只能是属于Animal对象的属性和方法。
Cat a2 = (Cat)a;
a2所指向而且看得到的是整个Cat对象的属性和方法。
【java想问一下关于多态的知识点 如图 为啥换成Cat不行 Animal就可以】 由此可见:testAnimalVoice(a);会报错。

■网友
猫是动物,但是不见得所有动物都是猫。动用一下自己的逻辑思维。
■网友
多态 父类不能反过来传给子类的
■网友
看第一图,你那个方法不就叫「testAnimalVoice」吗,换成~Cat~当然不行了.


    推荐阅读