Java中多态的向下强制转换类型

这是为什么不能转呢

img


但是这个可以转

img

所以是需要本身new所创建的类型是dog类型是吗?Animal b=new Dog();向上自动转为了Animal,这个时候可以向下转为Dog类型。如果是new Animal();本身new的类型就是Animal,就不能向下转了。不知道是不是这样.求解

.父类引用对象指向的是子类对象,那么在向下转型的过程中是安全的,就是编译是不会出错误。
但是如果父类引用对象是父类本身,那么在向下转型的过程中是不安全的,编译不会出错,但是运行时会 出现 Java 强制类型转换异常

向下强制转换当然不行了
主要问题是第一张图你new的是基类对象,在内存中也只有基类信息,你向下强制当然不行,就没有子类的内容
第二张图你new的是子类对象,虽然赋值给基类指针,但内存中实际上是子类信息,所以再转换为子类对象,当然OK了