一、多态
1)意义:
1.1)同一类型的引用指向不同的对象时,有不同的实现
----行为的多态:cut()、step()、getImage()…
Person p1 = new Student();
Person p2 = new Teacher();
Person P3 = new Doctor();
1.2)同一个对象被造型为不同的类型时,有不同的功能
----对象的多态:我、你、水
Person p1 = new Student();
Student stus = new Student();
2)向上造型/自动类型转换(小到大的转换):
2.1)超类型的引用指向派生类的对象
2.2)能造型成为的数据类型: 超类+所实现的接口
2.3)能点出来什么,看引用的类型
Animal a = new cat();
Animal b = new dog();
3)强制类型转换,成功的条件只有如下两种情况:
3.1)引用所指向的对象,就是该类型
3.2)引用所指向的对象,实现了该接口或继承了该类
4)强转时若不符合如上条件,则发生ClassCastException类型转换异常
建议:在强转之前先通过instanceof来判断引用指向的对象是否是该类型
instanceof关键字
作用:用来判断某个对象是否属于某种数据类型。
二、多态的强制转换
instanceof关键字
作用:用来判断某个对象是否属于某种数据类型。
注意: 返回类型为布尔类型boolean
向下转型:一个已经向上转型的子类对象可以使用强制类型转换的格式,将父类引用类型转为子类引用各类型,即 将父类的引用强制转换成子类的引用。
使用格式:子类类型 变量名=(子类类型) 父类类型的变量;
适用场景:当要使用子类特有功能时。
这里先判断一下cat是不是Animal类型的,若果是的就对cat进行强制转换,再调用shoot方法;如果不是的就执行不了,并且程序不会报错