面向对象(9):多态和引用类型的强制转换


一、多态

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方法;如果不是的就执行不了,并且程序不会报错

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值