向下转型(通俗易懂) 您所在的位置:网站首页 子类什么意思 向下转型(通俗易懂)

向下转型(通俗易懂)

2023-10-25 17:31| 来源: 网络整理| 查看: 265

向下转型 与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)

案例驱动 先看一个例子:

Animal a = new Cat(); Cat c = (Cat) a; c.eat(); //输出 我吃鱼 Dog d = (Dog) a; d.eat(); // 报错 : java.lang.ClassCastException Animal a1 = new Animal(); Cat c1 = (Cat) a1; c1.eat(); // 报错 : java.lang.ClassCastException

为什么第一段代码不报错呢?相比你也知道了,因为a本身就是Cat对象,所以它理所当然的可以向下转型为Cat,也理所当然的不能转为Dog,你见过一条狗突然就变成一只猫这种操蛋现象?

而a1为Animal对象,它也不能被向下转型为任何子类对象。比如你去考古,发现了一个新生物,知道它是一种动物,但是你不能直接说,啊,它是猫,或者说它是狗。

向下转型注意事项 向下转型的前提是父类对象指向的是子类对象(也就是说,在向下转型之前,它得先向上转型) 向下转型只能转型为本类对象(猫是不能变成狗的)。

大概你会说,我特么有病啊,我先向上转型再向下转型??

我们回到上面的问题:喂动物吃饭,吃了饭做点什么呢?不同的动物肯定做不同的事,怎么做呢?

public void eat(Animal a){ if(a instanceof Dog){ Dog d = (Dog)a; d.eat(); d.run();//狗有一个跑的方法 } if(a instanceof Cat){ Cat c = (Cat)a; c.eat(); System.out.println("我也想跑,但是不会"); //猫会抱怨 } a.eat();//其他动物只会吃 } eat(new Cat()); eat(new Cat()); eat(new Dog()); //.....

现在,你懂了么?这就是向下转型的简单应用,可能举得例子不恰当,但是也可以说明一些问题。 ————————————————

原文链接:https://blog.csdn.net/qq_31655965/article/details/54746235



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有