内容


Java 语言多态性

Comments

此文将演示如何使用 Java™ 语言实现多态性。有一些构建此文的视频和逐步操作说明。学习这些后,您就能使用 Java 语言在您的项目中实现多态性!

前提条件

Java 平台的基础知识

面向对象概念的基础知识

逐步介绍

设置开发环境

要完成此文,需要安装 JDK 和 Eclipse IDE。假设您拥有一定的 Java 基础知识。如果没有,请查阅 IBM developerWorks 上的 《Java 编程简介》学习路径

您还需要一个正常工作的开发环境。如果已有一个 Java 开发环境,可跳到第 2 步。

否则,请参阅 《Java 编程简介》学习路径,第 2 单元 获得逐步操作说明。如果需要更多帮助,本节中还有一些视频可帮助您。

首先,下载 Java Development Kit (JDK) V8 并将它安装在您的机器上。如果需要帮助,请观看下面的视频。

下载和安装 JDK 8
下载和安装 JDK 8

接下来,将 Eclipse IDE 安装在计算机上。如果需要帮助,请观看下面的视频。

下载和安装 eclipse
下载和安装 eclipse

设置并准备好开发环境后,前进到第 2 步,在这一步中将介绍多态性。

定义多态性

多态性是面向对象编程中的一个概念,表示"不同形态",实际上意味着,根据实现方法的对象,相同方法名称具有不同的行为。

在 Java 编程语言的语境中,多态性意味着(通过一种方法)以不同方式为不同对象实现相同的行为契约。在 Java 中,通常有 3 种方式实现此目的:

  • 接口
  • 抽象方法
  • 方法重写

通过接口实现多态性

实质上,接口要求每个顶级对象实现都是不同的(顶级对象指的是继承图中第一个对象,该对象显式声明它实现了所指的接口)。在通过引用接口 A,而不是引用对象 B 来传递实现接口 A 的对象 B 时,就会实现多态性。

通过抽象方法实现多态性

Java 语言还能创建抽象方法,这种方法只能存在于抽象类(即无法实例化的类)上。这种实现方式的思路是,必须在分层结构中的某处由子类 B 实现(抽象类 A 上定义的)抽象方法(假设为 foo()),然后才能实例化 B。在通过引用接口 A 来传递类型 B 的对象时,就会实现多态性。

通过方法重写实现多态性

子类 B 提供父类 A 中的某个方法(假设为 foo())的替代实现时,就可以说重写了 foo()。类型 B 的对象作为类型 A 传递给某个方法时,Java 运行时会确定是否必须实际调用 B.foo(),而不是 A.foo()。这就是通过方法重写实现多态性的方式。

编写代码

在设置开发环境并基本了解多态性后,是时候动手实践了。

在本节中,将从 Github 拉取代码,在 Eclipse 中创建一个新项目,导入该代码,并处理该代码。

我非常喜欢测试驱动开发 (TDD),所以您首先将会执行单元测试,看看应用程序会有何种行为,然后实现该行为,直到通过单元测试。我在 com.makotojava.learn.polymorpher.solution 包中为必须编写的每个模块提供了一个解决方案,以防您遇到困难,或者想要了解我是如何实现该解决方案的。

在本视频中,我将展示以下内容:

java 语言多态
java 语言多态

视频中的总体步骤(强烈建议跟着视频一起操作):

  • 克隆 Github 存储库。
  • 打开 Eclipse。
  • 基于 Github 中的代码导入新的 Maven 项目。
  • 运行单元测试,并观察它们失败。
  • 研究单元测试,了解应如何编写方法。
  • 编写实现代码,直到通过单元测试。
  • 恭喜您编写了一个具有多态性的应用程序!

融会贯通

这个应用程序演示了哪些知识?

第 2 步已提到,在 Java 语言中,多态性主要通过 3 种方法实现:

  • 使用接口
  • 使用抽象方法
  • 使用方法重写

单元测试描述了实现过程。如果您学习了这些方法并真正理解了它们的工作原理(和原因),将很容易掌握多态性!

了解后续行动

实际了解多态性后,可通过访问 《Java 编程简介》学习路径 进一步了解 Java 语言。

此文融合了第 3-6 单元课程的知识。如欲继续学习,请访问 第 7 单元

希望您喜欢此文!

如果有疑问或想要与我交流,请在 Twitter 上关注我并向我发送推文 (@jstevenperry)。


评论

添加或订阅评论,请先登录注册

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Java technology
ArticleID=1049366
ArticleTitle=Java 语言多态性
publish-date=09072017