3-12编程练习中使用instanceof运算符有什么意义?
使用instanceof进行强制类型转换判断:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | 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]的方法进行输出:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | 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积分~
来为老师/同学的回答评分吧