3-12编程练习中使用instanceof运算符有什么意义?
使用instanceof进行强制类型转换判断:
for(int i=0;i<5;i++){ if(animal[i] instanceof Cat){ Cat cat=(Cat)animal[i]; cat.cry(); } if(animal[i] instanceof Dog){ Dog dog=(Dog)animal[i]; dog.cry(); } if(animal[i] instanceof Sheep){ Sheep sheep=(Sheep)animal[i]; sheep.cry(); } }
直接访问animal[i]的方法进行输出:
public class Test { public static void main(String[] args) { //生成父类对象数组,数组长度为5 Animal[] animal=new Animal[5]; //产生随机数,随机产生三种具体子类的实例 for(int i=0;i<5;i++){ int temp=(int)(Math.random()*3); switch(temp){ case 0:{ animal[i]=new Cat(); break; } case 1:{ animal[i]=new Dog(); break; } case 2:{ animal[i]=new Sheep(); break; } } } //循环输出,循环体中每个对象分别调用cry()方法。 for(int i=0;i<5;i++){ animal[i].cry(); } } }
循环输出的时候,只要子类重写了父类的cry方法,通过父类对象animal[i]访问到的cry方法就是它子类的cry方法吧。就像我上面写的那样,运行出来也是正确的。是不是编译器会自动判断animal[i]属于哪一个子类的储存空间?求解答,谢谢♪(・ω・)ノ
43
收起
正在回答
1回答
比如animal[i] instanceof Cat,instanceof是判断animal[i]是否为Cat类型的。
当子类重写了父类的cry()方法,父类引用指向子类对象,调用cry()方法时会调用子类重写的cry()方法,这是多态的体现。祝学习愉快~
Java零基础入门18
- 参与学习 人
- 提交作业 7317 份
- 解答问题 14452 个
想要入门学编程?多年一直活跃在编程语言排行版前列的Java是一个很好的选择。本路径将从Java基础语法、面向对象、常用工具类三部分,为你开启软件开发的大门!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星