|
1.6 多形对象的互换使用
将衍生类的对象当做基础类的对象对待 ; 即衍生类可以被当做它的基本类来处理,我们称这样的处理过程为“Upcasting”(上溯造型)其中“cast”(造型)表示为根据现有的模型创建;而“UP”(向上)表明继承的方向是从上面来的--即基础类位于顶部,而衍生类在下方展开。
这样就可以忽略不同类的细节,让某动作对所有类一视同仁。这样就不用分各种情况了。
1.6.1 动态绑定
我们用衍生类进行基本类的(相关)操作时,我们没做出任何指示,但是操作和结果仍然是正确的;这种情况,将一条消息发给对象后不知道对方的具体类型,但是结果仍然是正确的,这种情况就叫做“多型性”;对面向对象的语言来说,实现多型性的方法叫做动态绑定;编译器和运行期系统会负责对所有细节的控制。
有些语言要求用特殊的关键字进行动态绑定,在C++中为virtual ;Java中默认为全部动态绑定。
1.6.1 抽象的基础类和接口
1:抽象类:将abstract关键字用在类上
设计程序时,我们一般只想让基本类为衍生类提供一个接口,也就是说,我们不想让任何人直接创建一个基本类,而是只是上溯造型它,以便使用它的接口。为此,需要将那个类转化为抽象“abstract”的;使用abstract关键字,若有人试图创建一个抽象类的对象,编译器就会阻止他们。
2:抽象方法:将abstract关键字用在方法上
我们同时可以使用abstract关键字描述一个尚未实现的方法(注意是方法:不是类),作为一个“根”使用。指出:这是适用于从这个类继承的所有类型的一个接口函数,但目前尚没有对它进行任何形式的实现。抽象方法只能在抽象类中创建,(为啥是也许)继承一个类后,那个类必须实现那个抽象方法,否则那个继承的类也会变为抽象类。
通过创建抽象类,我们可以使用抽象方法,只提供接口,不需要添加可能无用的代码。
interface(接口)关键字将抽象类的概念更延伸了一步,它完全禁止了所有的函数定义。“接口”是一种相
当有效和常用的工具。另外如果自己愿意,亦可将多个接口都合并到一起(不能从多个普通 class 或
abstract class 中继承)。 (啥意思???) |
|