向下转型(通俗易懂)
向下转型 与向上转型相对应的就是向下转型了。向下转型是把父类对象转为子类对象。(请注意!这里是有坑的。)
案例驱动 先看一个例子:
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
最新发布
-
魔兽世界9.15什么奶强
2025-05-14 20:53:11 -
海狸洗衣app官方下载
2025-05-17 04:57:14 -
从htc官方网站下载原版rom?只要是htc的任意机型都可以!
2025-05-11 16:19:55 -
欧路词典|英汉-汉英词典 draft是什么意思
2025-06-24 05:57:09 -
男人痣长在哪里有福 最有福气的10处吉痣男人篇
2025-06-13 09:39:41 -
为什么你的感情如此坎坷不顺
2025-06-07 02:33:44 -
沈阳交友平台
2025-06-27 20:06:16 -
手机上怎么看跑男直播?
2025-06-28 04:20:21 -
海洋怪物不只是传说,看看11种真实的海洋巨怪
2025-06-21 02:46:12 -
安装穿越火线要多久
2025-06-06 14:42:14