Java之多态

目录

学习背景

前言

什么是多态?

多态的实现

多态的使用

注意事项 

向上,向下转型 

向上转型

向下转型


学习背景

地点:长沙欧富安科技园1栋5楼飞思

时间:23年7月10~16号

前言

众所周知,Java有三要素即,封装,继承和多态。本次要总结的内容就是多态,将从什么是多态,多态的实现,和多态的使用等几个方面来简单阐释一下。

什么是多态?

字意如其形,多态,多态也就是多种形态。例如生活中的多态就是多样化,猫与猫之间的不同,习俗与习俗之间的不同,人与人之间的不同等等。

而代码之中的多态就是指,同一父类的各种子类类型的对象,执行相同的方法,得到结果不一样(父类引用子类对象 ==> 父类类型接收子类对象 也可以说是,(同一父类的,不同子类类型,的对象),执行相同的方法(重写父类的),得到结果不一样。

图解

 

多态的实现

由上述多态的定义可知,想要实现多态,则必须继承父类,并重写父类中的方法,故利用继承重写就能实现多态

当也由上可知,多态的使用会涉及到父类类型和子类对象,就会涉及到向上,向下转型问题这个我们稍后再总结。首先我们得知道两个概念,即,真实类型表面类型

Father son = new Son();

此时son的表面类型为Father,而真实类型为Son

总结出:

真实类型:Father ==>子类调用父类方法 ==>重写的

表面类型:Son ==>子类调用本身方法 ==>特有的   

多态的使用

案例:女孩喂养宠物

涉及到的类:女孩,狗,猫,企鹅,宠物,测试

女孩中喂养宠物的方法(不使用多态)

分析问题:

  1. 喂养方法,大致一样,存在代码重写

  2. 新添加新的宠物类, 软件设计原则: 开闭原则(对添加开放, 对修改关闭), 违背开闭原则,每一次新加一个宠物,都需要修改Lady类

  1. 创建一个新宠物类

  2. 继承Pet类

  3. 重写方法

  4. 修改Lady类, 新添加一个喂养方法 违背开闭原则

解决方案: 使用多态 

 

总结多态的使用方式:

  1. 父类类型作为参数类型

  2. 父类类型作为返回值类型

注意事项 

多态的三要素:

  1. 要有继承

  2. 使用父类变量接收子类对象

  3. 要有方法重写

向上,向下转型 

当我们使用多态时必定会出现的现象,即向上,向下转型问题,为什么会出现这样的问题在上面已经总结出来了。

向上转型

把子类对象赋值给父类变量, 自动类型转换

好处: 多态的实现

缺点: 只能调用父类存在的方法与属性, 无法调用子类特有属性和方法

使用场景:

  1. 实现多态

  2. 屏蔽子类的特有方法,只操作父类通用方法, 方便子类的替换

Father son = new Son();

向下转型

把父辈类的转换为子类类型, 需要强制类型转换

子类 变量 = (子类)父类变量;

好处: 调用子类特有属性和方法

缺点: 可能出现 ClassCastException(类型转换异常),真实类型不匹配

Son son = (Son) Son;
Pet p = new Dog();
Cat cat = (Cat)p; //报ClassCastException: 类型转换异常

解决向下转型的问题:

java提供的一个关键字: instanceof 语法: 变量 instanceof 类类型 表达式结果: boolean

true: 变量是类类型的一个对象或者类类型 的子类对象

false: 否则

Pet p = new Dog();
System.out.println(p instanceof  Pet); //true
System.out.println(p instanceof  Dog); //true
System.out.println(p instanceof  Cat); //false
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值