JAVA-初步认识-第十章-多态-类型判断-instanceof

一.

上面的截图是我们在多态的学习中所书写的语句,这样一来method()方法就可以提高复用性,不需要每一个物种的动物都去指挥它们吃饭。但是,需要a抓老鼠。再学习了多态的类型转化后,语句就可以修改成下面这样,

实际上,我认为这样的书写仅仅是为了使a能够调用抓老鼠的功能,并不符合真实的使用情况。因为这样一来就失去定义多态的作用了。

接着对这样的修改进行深入地分析,

在主函数的method(Animal a)方法中输入实参new Cat(),这是个猫类型的匿名对象,属于animal的子类,调用了mehod(Animal a)方法。经过编译运行,是没有问题的。但是如果主函数的method(Animal a)方法中输入狗类型的参数,就错了。因为method(Animal a)方法中的语句是Cat c=(Cat)a,必须是Cat类型的才能强转,狗类型的就会导致类型出错。传输是可以传输,但是在方法体中运行会出错,animal可以接受各种物种的传输。

以前在谈论输入年龄的时候,利用了if判断语句,这里也是一样。如何来进行判断,只有是Cat类型,才可以进行抓老鼠的操作。

由于method(Animal a)方法中接受的是animal,这样一来,只要是继承animal的子类,都是可以输入的,子类的子类也是可以的。

怎么判断方法它接受的是什么类型的对象呢?对于对象类型的判断是非常特殊的,不是==能够解决的(那些是用来比较基本数值的)。它使用的是特有的关键字来进行的判断,instanceof来进行的。

instanceof后面可以写类,也可以写接口。

如果判断不是猫类型,那就接着往下判断。

但是,这带来一个问题,随着物种的增加,程序的语句将会不断变多。

像这样的不断地判断的情况,现实中不会出现,只会有一个判断。

像这样的判断语句什么时候使用呢?

如果我们使用子类的特有方法,那就意味着要强转,对象转型。转型的时候,很容易出现失败,所以在转型之前通常都会加入逻辑判断。是为了增强我们代码的健壮性。

父类型一出现,子类型就不唯一了。

原文地址:https://www.cnblogs.com/wsw-bk/p/7828063.html