第四章 面向对象之多态
多态单词学习
Polymorphism 多态
Instance 实例
Override 重写
Constructor构造函数 (抗死抓K特)
ClassCastException 类型转换异常 exception 异常
Upcasting 向上转型
Downcasting 向下转型
Abstract 抽象
1_多态的概述
面向对象的三大特征之一: 封装 、继承 、多态 、抽象、
多态是同一个行为具有多个不同表现形式或形态的能力。 继承是多态的前提。

2_多态的格式与使用
|
* 代码当中体现多态性,其实就是一句话:父类引用指向子类对象 |
第一步:ch04.com.obtk_01.Demo01Multi

第二步:创建父类Fu

第三步:创建子类:Zi

提问:现在父类和子类方法一样,
以前我们创建对象都是子子new子,跟父类没关系,那我现在要通过多态的写法。
第四步:测试Demo01Multi

第五步:如果子类没有的方法怎么办?

第六步:测试Demo01Multi,

其实规律我们此前已经接触过,只不过我现在把概念告诉大家,什么叫多态?一句话左父右子就叫多态。
右侧子类对象就被当做父类使用,一只猫被当做动物看待,这是没有什么问题的,因为子类就是一个父类,在这里体现了面向对象的多态性。
3_多态中成员变量的使用特点
此前我们曾经总结过在继承关系中成员变量的访问特点,那么接下来我用多态的写法-这个成员变量的访问特点是否有变化?注意:没有任何变化
* 访问成员变量的两种方式: |
第一步:ch04.com.obtk_02.Fu

第二步:ch04.com.obtk_02.Zi

第三步:Demo01MultiField 访问成员变量的两种试


4_多态中成员方法的使用特点(其实成员方法的规则也没有变化)
* 在多态的代码当中,成员方法的访问规则是: |
第一步:在上一个包里创建类:Demo02MultiMethod.

第二步:在父类中创建方法method()

第三步:在子类当中也有方法

第四步:在父类中增加特有方法,子类中也增加特有方法


第五步: 那么在这种情况下,我们的这句话会不会发生改变?不会

解释:编译看左边,运行看右边意思,但成员变量不在此列。
作业:
1、 接口:P147-148 选择题 多态的英语单词要求背诵p84
2、 第一、二、四章的本章总结请抄写一次。如果能理解并表达可以不用抄写。

5_使用多态的好处
有同学肯定会问,你直接new一个对象就好了,为什么要用多态呢?

6_对象的向上转型

第一步:ch03.com.obtk_04.Animal

第二步:ch03.com.obtk_04.Cat

第三步:

看图讲解:原本是一只猫,我现在转型为动物,这就是对象的向上转型。
7_对象的向下转型

上节我通过多态的写法用了一把向上转型,但是向上转型一定是安全的,没有问题的,但是也有一个弊端。
第一步:在上一个包中:Demo01Main

第二步:Cat 在子类中增加方法

第三步:我能不能通过animal来调用抓老鼠的方法catchMouse().

第四步:错误写法解释。


第五步:创建Dog类,继承Animal

第六步:Demo01Main中继续,查看结果

ClassCastException:类转换错误

总结:向下转型,本来就是才能转,本来就不是,他就会报错ClassCastException.
8_用instanceof关键字进行类型判断
第一步:在上一个包中创建类:Demo02InstanceOf

第二步:如果new Cat改为new Dog呢?运行查看结果。

问题:本来想用狗的方法,为什么还要向上转型?向上转、向下转两种格式都知道,但是你这个代码好像没有意义,只有演示的意义,确实如此,
但是我们考虑另外一种情况:有的时候animal不是自己new出来,比如我现在有个Main方法,这个main方法是自己new了对象自己去转对吗?
比如我现在想养只宠物,不管是猫、狗、鱼都可以,我就是为了打发时间,我应该怎么做?
第三步:Demo02Instanceof类中继续

特别注意:向下转型一定要做instanceof类型判断,否则有可能会发生异常。ClassCastException
9_笔记本USB接口案例——分析
接口与多态的综合案例
需求:笔记本电脑
笔记本电脑(laptop)通常具备使用USB设备的功能,在生产时,笔记本都预留了可以插入USB设备的USB接口,但具体是什么USB设备,笔记本厂商并不关心,只要符合USB规格的设备都可以。

定义USB接口,具备最基本的开启功能和关闭功能,鼠标和键盘要想能在电脑上使用,那么鼠标和键盘也必须遵守USB规范,实现USB接口,否则鼠标和键盘生产出来无法使用。
案例分析
笔记本类,实现笔记本使用USB鼠标、USB键盘、U盘
USB接口,包含打开设备功能,关闭设备功能。
鼠标类:实现USB接口,具备点击功能
键盘类:实现USB接口,具备按键功能。
U盘:实现USB接口,具备存取功能。
笔记本类:包含开机功能、关机功能、使用USB设备的功能
第一步:创建ch05.com.obtk_laptop. USB
|
/* |
第二步:Laptop
|
/** |
第三步:Mouse
|
* 鼠标就是一个USB设备 |
第四步:Keyborad
|
* 键盘也是USB的设备
|
第五步:测试
|
public class DemoMain { |
1—静态static关键字

2——静态static关键字修饰成员变量
3——静态static关键字修饰成员方法

浙公网安备 33010602011771号