本节例题中animal可以强制转换成Dog类,为什么不能强制转换成Cat类?Cat类和Dog类都是Animal类的子类啊。
animal对象,是由Dog类的对象通过自动类型转换得来的,对象的属性和方法可以和Dog类的对象相匹配,所以可以再强制转换为Dog类,而不能匹配Cat类,所以不能强制转换为Cat类。
Cat cat=(Cat)animal;
这个语句在编译是是Cat类型的,在运行时是Dog类型的,两种类型不匹配,所以会报错。
也可以 这样理解 ,在程序刚开始运行是,系统为Dog类开辟一块内存地址空间,Dog类属于animal类,所以Dog类可以转,但是Cat类就不可以了,应为Cat类不属于Dog类,所以 不可以转
简单说,animal之所以可以强制转换为Dog类是通过“Animal animal = dog”语句先自动转换了的,所以animal跟Dog相匹配,如果Cat类跟Dog类一样先通过“Animal animal2 = cat”语句自动转换后再来强制把animal2转换成Cat也是可以的。你可以自己上手去操作一下,你就能更好的去了解了
因为animal已经被强制转换成Dog类,Dog类跟Cat类不匹配所以不能再进行转换。你可以先将animal强制转换成Cat类,那就不能再强制转换成Dog类了。