多态

第四章 面向对象-多态

什么是多态

  • 如何实现多态
  • 多态的好处
  • instanceOf关键字
  • 多态时的注意事项

学习目标:

  • 什么是多态?
  • 如何实现多态?
  • 多态带来的好处?
  • instanceOf关键字的用法

什么是多态

面向对象的三大特性:封装、继承、多态。从一定角度来看,封装和继承几乎都是为多态而准备的。这是面向对象最后一个概念,也是最重要的知识点。

多态的定义:

指允许不同类的对象对同一消息做出响应。即同一消息可以根据调用对象的不同
而采用多种不同的行为方式。
- 比方说按下 F1 键这个动作,如果当前在Word下弹出的就是Word帮助;在Windows下弹出的就是Windows帮助和支持。同一个事件发生在不同的对象上会产生不同的结果。

如何实现多态

多态存在的三个必要条件
1. 要有继承;
2. 要有重写;
3. 父类引用指向子类对象。向上转型

多态的好处

  • 可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
  • 可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性。
  • 接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的 。
  • 灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
  • 简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

instanceOf关键字

  • instanceof是Java的一个二元操作符,和==,>,<是同一类。由于它是由字母组成的,所以也是Java的保留关键字。它的作用是测试它左边的对象是否是它右边的类的实例,返回boolean类型的数据
  • java 中的instanceof运算符是用来在运行时指出对象是否是特定类的一个实例。instanceof通过返回一个布尔值来指出,这个对象是否是这个特定类或者是它的子类的一个实例。
  • 用法:
实例对象 instanceof 某个类名

例子
1. //使用多态来创建了一只猫
2. Animal cat = new Cat();
3. //判断猫是否是一个动物
4. if(cat instanceof Animal)
5. {
6. System.out.println(“猫是一只动物”);
7. }
- 在判断父类的引用指向了子类的实例时,我们可以进行强制类型转换。
1. Animal anim = new Cat();
2. if(anim instanceof Animal)
3. {
4. //强制类型转换,向下转型
5. Cat cat = (Cat)anim;
6. }
当对不具有相同类型的对象进行强制类型转换时,java运行时将抛出java.lang.ClassCastException的错误。

多态时的注意事项

//左边 右边
Animal c = new Cat();
1.编译器看左边:在编译的时候编译器不管你右边是什么类,只要左边的Animal类能编译通过就不会报错。在编译器去调用方法时,所有方法必须在Animal中声明过,否则找不到方法,编译失败
2.运行期看右边:实际调用过程中,系统会根据你右边是否有该方法,而去执行,如果没有,则执行左边的父类的方法。

学员作业
  1. 定义商品类及其多层的派生类。以商品类为基类。第一层派生出服装类、家电类、车辆类。
    第二层派生出衬衣类、外衣类、帽子类、鞋子类;空调类、电视类、音响类;自行车类、轿车类、摩托车类。要求给出基本属性和派生过程中增加的属性
  2. 几何形体的派生关系如下对平面形体有长和面积,对立体有表面积和体积,对 几何图形基类,周长、面积和体积应怎样计算(用什么函数)?对平面图形体积怎样计算(用什么函数)?对立体图形周长怎么计算(用什么函数)?要求实现多态性。
  3. 编写一个程序实现小型公司的工资管理。该公司主要有4类人员:经理(mainager)、技术人员(technician)、销售员(salesman)、销售经理(salesmanager)。这些人员是职员(employee),有编号、姓名、月工资信息。月工资的计算方法是:经理固定月薪8000元,技术人员每小时100元,销售员按当月销售额4%提成,销售经理既拿固定月工资5000元也拿销售提成,销售提成为所管辖部门当月销售额的5‰。要求编程计算职员的月工资并显示全部信息。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值