多态

多态

为什么需要有多态?
一个动作在不同的环境下表现出来的不同种状态
如:
Cut
理发师: 剪头发
导演: 暂停
医生: 开刀

多态的概述:
生活中: 同一个动作在不同的环境下体现出来的不同的状态
代码中:同一个方法在不同的类下体现出来的不同的实现
内存中:父类引用指向子类对象

使用多态的前提条件
(多态在代码中如何来实现?)
1.一定要有继承关系
2.一定要有重写
3.父类引用指向子类对象
父类 fu = new 子类();

多态访问成员的特点

成员变量:编译时期看左边类型,运行时期看左边类型
成员方法:编译时期看左边类型,运行时期看右边类型
构造方法:帮助子类初始化父类继承过来的成员
静态方法:编译时期看左边类型,运行时期看左边类型

多态的优点

1.简化了代码
2.提高了程序的维护性和扩展性

多态的缺点

多态的缺点:使用多态不能够访问子类所持有的方法

解决办法:向下转型

向上转型(自动转换)
格式: <父类型><引用变量名> = (<子类型>)<父类型的引用变量>;
特点:
子类转为父类 父类的引用指向子类对象。自动进行类型转换
此时通过父类引用变量调用的方法是子类覆盖或继承父类的方法
此时通过父类引用变量无法调用子类特有的属性和方法

向下转型 (强制类型转换)
格式: <子类型><引用变量名> = (<子类型>)<父类型的引用变量>;
特点:
父类转为子类,父类引用转为子类对象,强制类型转换
在向下转型的过程中,如果没有转换为真实子类类型,会出现类型转换异常

java.lang.ClassCastException:com.sxt.duotaidem.benz cannot be cast to com.sxt.duotaidemo.BMW ClassCastException:类型转换异常
产生原因:在向下转型的过程当中,没有转换成真实的类型
解决办法:在向下转型的过程当中,对父类类型的所有子类做逐一判断

instanceof关键字

左边对象instanceof 右边类 这是一个表达式,结果BOOLEAN类型
判断左边对象是否属于右边类的实例

无法解决的问题 : 如果是object类呢?–后面会有泛型

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值