正在加载图片...
7:多态性 多态性是继数据抽象和继承之后的,面向对象的编程语言的第三个基本特 性 它提供了另一个层面的接口与实现的分离,也就是说把做什么和怎么做分 开来。多态性不但能改善代码的结构,提高其可读性,而且能让你创建可 扩展的( extensin/e)程序。所谓“可扩展”是指,程序不仅在项目最初的 开发阶段能“成长”,而且还可以在需要添加新特性的时候“成长”。 封装”通过将数据的特征与行为结合在一起,创建了一种新的数据类 型。“隐藏实现”通过将细节设成 private,完成了接口与实现的分离。 之所以要采取这种比较呆板的顺序来讲解,是要照顾那些过程语言的程序 员们。但是,多态性是站在“类”的角度来处理这种逻辑上的分离的。在 上一章中,你看到了,“继承”是怎样允许你将对象当作它自己的,或者 它的基类的类型来处理的。这是一个很重要的功能,因为它能让你把多个 类(派生自同一个基类的)当作一个类来处理,这样一段代码就能作用于很 多不同的类型了。“多态方法调用( polymorphic method cal)”能让 类表现出各自所独有的特点,只要这些类都是从同一个基类里派生出来的 就行了。当你通过基类的 reference调用方法的时候,这些不同就会通 过行为表现出来。 本章会从基础开始,通过一些简单的,只涉及多态行为的程序,来讲解多 态性(也被称为动态绑定『 dynamic binding」、后绑定「/ate binding」或运行时绑定『run- time bingding」)。 再访上传( upcasting) 你已经在第6章看到,怎样把对象当作它自己的或是它的基类的对象来使 用。把对象的 reference当作基类的 reference来用,被称为上传 ( upcasting)。因为在继承关系图中,基类总是在上面的。 但是问题也来了。下面我们用乐器来举例。由于乐器要演奏Note(音 符),所以我们在 package里单独创建一个Note类: 77: c07: music: Note. java / Notes to play on musical instruments package c07 musici import com. bruceeckel simpletest ublic class Note private string noteName private Note(String noteName)i this. noteName noteName public String tostring ()t return noteNamei I 第2页共29页 www.wgqqh.com/shhgs/tij.htmlChapter 7: Polymorphism 第 2 页 共 29 页 www.wgqqh.com/shhgs/tij.html email:shhgs@sohu.com 7: 多态性 多态性是继数据抽象和继承之后的,面向对象的编程语言的第三个基本特 性。 它提供了另一个层面的接口与实现的分离,也就是说把做什么和怎么做分 开来。多态性不但能改善代码的结构,提高其可读性,而且能让你创建可 扩展的(extensible)程序。所谓“可扩展”是指,程序不仅在项目最初的 开发阶段能“成长”,而且还可以在需要添加新特性的时候“成长”。 “封装”通过将数据的特征与行为结合在一起,创建了一种新的数据类 型。“隐藏实现”通过将细节设成 private,完成了接口与实现的分离。 之所以要采取这种比较呆板的顺序来讲解,是要照顾那些过程语言的程序 员们。但是,多态性是站在“类”的角度来处理这种逻辑上的分离的。在 上一章中,你看到了,“继承”是怎样允许你将对象当作它自己的,或者 它的基类的类型来处理的。这是一个很重要的功能,因为它能让你把多个 类(派生自同一个基类的)当作一个类来处理,这样一段代码就能作用于很 多不同的类型了。“多态方法调用(polymorphic method call)”能让 类表现出各自所独有的特点,只要这些类都是从同一个基类里派生出来的 就行了。当你通过基类的 reference 调用方法的时候,这些不同就会通 过行为表现出来。 本章会从基础开始,通过一些简单的,只涉及多态行为的程序,来讲解多 态性(也被称为动态绑定『dynamic binding』、后绑定『late binding』或运行时绑定『run-time bingding』)。 再访上传(upcasting) 你已经在第 6 章看到,怎样把对象当作它自己的或是它的基类的对象来使 用。把对象的 reference 当作基类的 reference 来用,被称为上传 (upcasting)。因为在继承关系图中,基类总是在上面的。 但是问题也来了。下面我们用乐器来举例。由于乐器要演奏 Note(音 符),所以我们在 package 里单独创建一个 Note 类: //: c07:music:Note.java // Notes to play on musical instruments. package c07.music; import com.bruceeckel.simpletest.*; public class Note { private String noteName; private Note(String noteName) { this.noteName = noteName; } public String toString() { return noteName; }
<<向上翻页向下翻页>>
©2008-现在 cucdc.com 高等教育资讯网 版权所有