问答详情
源自:10-2 多态中的引用类型转换

为什么转换成dog可以,而不能转换成cat


http://img.mukewang.com/578234d700016efc06600379.jpg

dog和cat同为不同子类的对象


提问者:3128 2016-07-10 19:44

个回答

  • 木刻雪原
    2016-07-12 14:03:47
    已采纳

    你要看代码哦:

    Dog dog=new Dog();

    Animal animal=dog();

    Dog dog2=(Dog)animal;

    Cat cat=(Cat)animal;

    代码 分析:

    Dog dog=new Dog(); //new了一个Dog()对象,并被dog指向;

    Animal animal=dog; //创建变量animal 并赋值为dog;也就是说把dog的指向赋值给animal;

    上面其实可以综合成一句代码:Animal animal = new Dog();其实就是父类实例化子类对象,即多态;

    Dog dog2=(Dog)animal;//创建dog2,为其赋值animal的指向,由于animal的类型是Animal,大(Animal)转小(Dog),所以需要强制类型转换;

    最后关键来了,创建了一个Cat类型的cat,然后为其赋值animal:

    Cat cat=(Cat)animal;

    注意:此时animal是Animal类的Dog对象,也就是说你拿动物类中的一只小狗这个对象,去把它变成猫类中的一只猫,你考虑过汪星人的想法么?汪星人不愿意啊,当然是不行的。

    那为什么之前一句可以呢?之前一句的意思是说,把动物类的一只小狗,放进狗类里然后改名叫dog2,那汪星人当然愿意啊,多好啊,找到归宿了。但是动物类中叫dog的这只小狗其实和狗类中叫dog2的小狗,是同一只大汪汪啊~~~

    话说回来,这只小狗真可怜,被你们这帮程序员拎过来拎过去的,还要变成猫,哎~~~

    木刻回答,必属精答,纯手打,望采纳~~

  • 慕仰6620973
    2016-07-10 20:29:32

    狗当然不能转到猫了。。但可以把狗叫成动物。 类型只能为本类或父类。