一、优势:
方法中,参数类型为父类,就可以接收所有子类对象
二、弊端:
创建的父类对象不能使用子类的特定功能
这里对应上文对成员方法的调用:编译看左边,运行看右边
结合这里是什么意思呢?
就是机器在编译代码的时候,对象在调用一个方法的时候,会先到父类中看是否又这个方法,
如果没有该调用的方法,直接报错Bug,
因此如果我们调用子类特有的方法不是在父类内的,就会直接报错!
那么如果我非要用子类的特定方法呢?
有没有什么办法呢?
答案是有的。
怎么做?
和数据类型一样,做强制类型转换
把父类类型的对象强制转换成该子类类型的对象即可
这样对象就变成了子类类型的,就可以调用子类的方法
怎么转换?
关键字:instanceof
a instanceof Dog d
变量名字 instanceof 类名字 类对象名
作用:判断变量a是不是Dog类型的对象,如果不是,直接返回Flase,是的话直接强转为Dog类型
代码解释:如果变量a是Dog类型,则返回1;如果不是,直接将之强制转换成d
d就是Dog类型的对象变量,也返回1
但是这里需要注意一点:如果我们原来创建的是一个Dog的对象d,现在却要把a instanceof转换成Cat的类型,这就会报错
只能把父类的类型强制转换成小的子类类型
即大的转换成小的,和数据类型的强转一个道理,只能int 转换成 bety ,而不是别的