package com.myjava2.polymorphic; public class Initial { public static void main(String[] args) { Dog dog = new Dog();//dog是Dog类型的实例 Animal animal = dog;//向下类型转换 if(animal instanceof Dog){ Dog dog2 = (Dog)animal;//强制类型转换 }else{ System.out.println("无法进行类型转换"); } if(animal instanceof Cat){ Cat cat = (Cat) animal;//1.编译是Cat类型 2.运行是Dog类型 }else{ System.out.println("无法进行类型转换"); } } }
求解答
这是面向对象中多态的特性,
Animal 动物 = 狗,此时(动物)的类型属于Animal,值为狗,这是多态中类型的向下转换,是成立的 Cat 猫 = (Cat)动物,此时(猫)的类型属于Cat,值为动物(且该动物已被赋为了狗) 你可以说动物中包含狗,动物是狗的分类 你不可以说猫中包含狗,猫是狗的分类,这样说会不会很怪,因它不成立,所以会返回false
因为虽然我们对dog向上类型转换成了Animal,但是它是属于Dog类的,所以我们对animal进行判断时,它属于Dog类而不是Cat类(即第一个会进行强转,第二个会输出:"无法进行类型转换")。通俗的说我们可以把所有的动物放在animal类里面;但不会因为我们放在animal类里面而改变其种类。
先声明了一个Dog类的dog对象,然后申明Animal类的animal对象转换为Dog类中的dog对象,二cat为Cat类的对象,Cat是Animal的子类,如果向上转化类型将cat转换为animal时,因为之前animal为dog转换而来的所以animal现在是Dog类,所以会发生错误。(我是这样理解的,不知道正确不,不知道帮到你没有)
先声明了一个Dog类的dog对象,然后申明Animal类的animal对象转换为Dog类中的dog对象,二cat为Cat类的对象,Cat是Animal的子类,如果向上转化类型将cat转换为animal时,因为之前animal为dog转换而来的所以animal现在是Dog类,所以会发生错误。(我是这样理解的,不知道正确不,不知道帮到你没有)
因为这个时候的animal指的是dog 不能再指cat了