当前课程知识点:Java程序设计 >  第四章 接口与多态 >  4.4-多态的应用举例 >  多态的应用举例

返回《Java程序设计》慕课在线视频课程列表

多态的应用举例在线视频

多态的应用举例

下一节:构造方法和多态性

返回《Java程序设计》慕课在线视频列表

多态的应用举例课程教案、知识点、字幕

大家好

欢迎回来继续学习

JAVA语言程序设计

在这一节呢

我们将通过一个例子

让大家来看一看多态的应用

这里给出一个二次分发的例子

什么是二次分发技术呢

等看完这整个例子大家就理解了

在这个例题中呢

要求定义一个交通工具类

代表各种不同类型的交通工具

这个类叫vehicle

然后需要有一个公共汽车类bus

和一个小汽车类car

那么bus和car都继承vehicle类

它是vehicle的两个子类

另外还要有一个抽象的driver类

以及两个子类

femaledriver女性驾驶员

和maledriver男性驾驶员

在driver类里面呢

要声明抽象方法drives

然后在每个子类中

对这个方法进行覆盖

这个drives方法呢

它会接受一个vehicle类型的参数

当不同类型的交通工具

被传送到这个方法的时候

它可以输出驾驶不同类型

交通工具的这种信息

然后这些所有的类呢

我们都它放在drive这个包里面

在这个例子呢

我们希望得到一个二次分发的效果

首先我把我们的测试代码

和这个测试代码

希望得到的效果列在这儿

然后我们再看怎么实现

那我们来看在这个测试方法中呢

我们构造了一个femaledriver对象

构造了一个maledriver对象

还有car对象和bus对象

但是这些对象的引用

分别都赋值给了它们的超类的引用

然后我们来调用

比如说我们通过对象a来调用drives

实际上对象a

它虽然是driver引用

但是它实际指向的对象类型

是femaledriver类型

那么它的参数x

虽然是vehicle引用

但是它实际指向的对象是car

所以我们希望

这一个对drives方法的调用

可以得到第一行数出结果

一个女性驾驶员驾驶了一个小汽车

同样第二行调用

我们通过对象引用b

来调用drives方法

b是driver类型的引用

但是它实际上指向的是

男性驾驶员maledriver

参数y是vehicle类型的引用

但是它实际指向的是公共汽车

大轿车bus

那我们希望得到的输出结果呢

是A male driver drives a bus

怎么能得到这样的二次分发效果呢

现在我们就来看

怎么编码来实现它

首先我们声明了这样一个vehicle类

在这个类中呢

我们看到除了构造方法以外呢

我们有两个抽象方法

一个是drivedByFemaleDriver

一个是drivedByMaleDriver

这两个方法都只有方法原型

没有方法体实现

所以这个类是一个抽象类

接下来我们来看bus和car

这两种交通工具呢

都继承了vehicle

它们自己分别实现了

drivedByFemaleDriver

drivedByMaleDriver

自己两个类都分别对它实现了

那么这个实现里头

我们就简单的

用输出一行信息来表示吧

这里比如说实现了输出

A female driver drives a bus

这样的一个信息输出

那其他的几个方法实现的输出

也都是输出一行信息来表示

再看这个驾驶员类driver类

它也是一个抽象类

这里面的drives方法呢

也只有方法原型

没有方法体的实现

那么它的参数接受一个vehicle引用

那再看female driver

和male driver

分别实现了这个drives方法

实现的方式呢

就是通过参数引用

去调用这个对象的

drivedByFemaleDriver

调用这个对象的

drivedByMaleDriver

这样的话我们就看

回到前面的测试代码这儿来

当我们调用一个drives方法的时候

首先根据引用a或者引用b

它们所实际指向的对象类型

做一次分发

而在drives方法内部呢

又会根据这个参数引用

它实际指向的交通工具类型

进行二次分发

所以得到了这样的结果

通过这个例子我们看到

这就是二次分发

也就是说对于请求呢

它被分发了两次

首先根据驾驶员的类型

把它发送给一个类

然后再根据交通工具的类型

又发送给另一个类

所以有两次分发

这一节呢

我们通过一个二次分发的例子

让大家看到了多态性的一个应用

这一节目内容就是这样

Java程序设计课程列表:

第一章 Java语言基础知识

-1.0-导学

--1.0-导学

--JDK的安装与配置01

--JDK的安装与配置02

--JDK的安装与配置03

--编辑并执行第一个java程序01

--编辑并执行第一个java程序02

--编辑并执行第一个java程序03

--eclipse的安装和配置01

--eclipse的安装和配置02

--eclipse的安装和配置03

--使用eclipse进行Java的开发01

--使用eclipse进行Java的开发02

--使用eclipse进行Java的开发03

-1.1-Java与面向对象程序设计简介

--1.1.1 Java与面向对象程序设计简介

--第一章 Java语言基础知识--1.1-Java与面向对象程序设计简介

-1.2-基本数据类型与表达式

--1.2.1-基本数据类型与表达式

-第一章 Java语言基础知识--1.2-基本数据类型与表达式

-1.3-数组

--1.3.1-数组

-第一章 Java语言基础知识--1.3-数组

-1.4-算法的流程控制

--1.4.1-算法的流程控制

--第一章 Java语言基础知识--1.4-算法的流程控制

-1.5-第一章小结

--1.5.1-第一章小结

-第一章编程练习题

-课件

--外部链接

第一章续-习题讲解视频

-Java环境配置、Eclipse使用、Helloworld程序详解

--JAVA的安装和配置

--编写并执行第一个Java程序及Java的跨平台性

--eclipse的安装和配置

--使用eclipse建立Java项目、编写和运行Java程序

--Java注释和Eclipse中的注释操作

--详解HelloWorld程序

-Java数据类型

--Java数据类型介绍

--Java整数类型

--Java浮点类型

--Java字符类型和布尔类型

--数据类型实战

--数据类型转换

--Java强制类型转换精度损失示例与表达式中的数据类型转换

-Java数组

--Java数组介绍、声明与使用

--一维数组的初始化与length属性

--数组索引的原理与使用

--二维数组的介绍与使用

-Java变量

--Java的变量

-命令行参数

--命令行参数的介绍

第二章 类与对象

-2.0-导学

--2.0-导学

-2.1-面向对象方法的特性

--2.1-面向对象方法的特性

--第二章 类与对象--2.1-面向对象方法的特性

-2.2-1-类声明与对象创建

--2.2-1-类声明与对象创建

--第二章 类与对象--2.2-1-类声明与对象创建

-2.2-2-数据成员

--2.2-2-数据成员

--第二章 类与对象--2.2-2-数据成员

-2.2-3-方法成员

--2.2-3-方法成员

--第二章 类与对象--2.2-3-方法成员

-2.2-4-包

--2.2-4-包

--第二章 类与对象--2.2-4-包

-2.2-5-类的访问权限控制

--2.2-5-类的访问权限控制

--第二章 类与对象--2.2-5-类的访问权限控制

-2.3-1-对象初始化

--2.3-1-对象初始化

--第二章 类与对象--2.3-1-对象初始化

-2.3-2-内存回收

--2.3-2-内存回收

--第二章 类与对象--2.3-2-内存回收

-2.4-枚举类

--2.4-枚举类

--第二章 类与对象--2.4-枚举类

-2.5-应用举例

--2.5-应用举例

-2.6-第2章小结

--2.6-第2章小结

-第二章编程练习题

-课件

--第二章课件

第三章 类的重用

-3.0-导学

--3.0-导学

-3.1.1-3.1.2-类继承的概念和语法

--3.1.1-3.1.2-类继承的概念和语法

--第三章 类的重用--3.1.1-3.1.2-类继承的概念和语法

-3.1.3-隐藏和覆盖

--3.1.3-隐藏和覆盖

--第三章 类的重用--3.1.3-隐藏和覆盖

-3.2-Object 类

--3.2-Object 类

--第三章 类的重用--3.2-Object 类

-3.3-终结类与终结方法

--3.3-终结类与终结方法

--第三章 类的重用--3.3-终结类与终结方法

-3.4-抽象类

--3.4-抽象类

--第三章 类的重用--3.4-抽象类

-3.5-泛型

--3.5-泛型

--第三章 类的重用--3.5-泛型

-3.6-类的组合

--3.6-类的组合

-3.7-小结

--3.7-小结

-第三章编程练习题

-课件

--课件

第四章 接口与多态

-4.0-导学

--导学

-4.1-接口

--接口

--第四章 接口与多态--4.1-接口

-4.2.1-4.2.2-类型转换

--类型转换

--第四章 接口与多态--4.2.1-4.2.2-类型转换

-4.2.3-方法的查找

--方法的查找

--第四章 接口与多态--4.2.3-方法的查找

-4.3-多态的概念

--多态的概念

--第四章 接口与多态--4.3-多态的概念

-4.4-多态的应用举例

--多态的应用举例

--第四章 接口与多态--4.4-多态的应用举例

-4.5-构造方法与多态性

--构造方法和多态性

--第四章 接口与多态--4.5-构造方法与多态性

-4.6-本章小结

--本章小结

-第四章编程作业

-课件

--课件

第五章 输入输出

-5.0-导学

--5.0-导学

-5.1.1-5.1.2-异常处理的概念

--5.1.1-5.1.2-异常处理的概念

--第五章 输入输出--5.1.1-5.1.2-异常处理的概念

-5.1.3-5.1.5-异常的处理

--5.1.3-5.1.5-异常的处理

--第五章 输入输出--5.1.3-5.1.5-异常的处理

-5.2-输入输出流的概念

--输入输出流的概念

--第五章 输入输出--5.2-输入输出流的概念

-5.3.1-写文本文件

--写文本文件

--第五章 输入输出--5.3.1-写文本文件

-5.3.2-读文本文件

--读文本文件

--第五章 输入输出--5.3.2-读文本文件

-5.3.3-写二进制文件

--写二进制文件

--第五章 输入输出--5.3.3-写二进制文件

-5.3.4-读二进制文件

--读二进制文件

-5.3.5-File类

--File类

-5.3.6-处理压缩文件

--处理压缩文件

-5.3.7-对象序列化

--对象序列化

-5.3.8-随机文件读写

--随机文件读写

-5.4-本章小结

--本章小结

-课件

--课件

第六章 对象群体的组织

-6.0-导学

--导学

-6.1-Java集合框架介绍

--Java集合框架介绍

--第六章 对象群体的组织--6.1-Java集合框架介绍

-6.2-主要接口及常用的实现类

--6.2-主要接口及常用的实现类

--第六章 对象群体的组织--6.2-主要接口及常用的实现类

-6.3-常用算法

--常用算法

-6.4-数组实用方法

--6.4-数组实用方法

-6.5-基于动态数组的类型(Vector, ArrayList)

--基于动态数组的类型(Vector, ArrayList)

-6.6-遍历Collection

--遍历Collection

-6.7-Map接口及其实现

--Map接口及其实现

-6.8-第6章小结

--第6章小结

-课件

--课件

第七章 图形用户界面

-7.0-导学

--导学

-7.1-绘图

--绘图

-7.2-Swing基础

--Swing基础

-7.3-Swing的层次

--Swing的层次

-7.4-布局管理

--布局管理

-7.5-内部类

--内部类

-7.6-事件处理的基本概念

--事件处理的基本概念

-7.7-事件派发机制

--事件派发机制

-7.8-顶层容器

--7.8-顶层容器

-7.9-中间层容器(一)

--7.9-中间层容器(一)

-7.10-中间层容器(二)

--7.10-中间层容器(二)

-7.11-原子组件(一)

--7.11-原子组件(一)

-7.12-原子组件(二)

--7.12-原子组件(二)

-7.13-原子组件(三)

--7.13-原子组件(三)

-7.14-其它Swing特性

--7.14-其它Swing特性

-7.15-第7章小结

--7.15-第7章小结

-课件

--课件

多态的应用举例笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。