2、动态绑定机制
方法绑定:创建方法调用和方法本体之间关联,分为早绑定,即程序执行前绑定;晚绑定,即执行时根据对象类型进行绑定。
如何动态绑定的途径:
- 虚方法(virtual),容许对不一样类中的同名方法有不一样的实现,并在运行期进行绑定。使用规则:1)用关键字virtual声明;2)使用覆盖(override)替换或扩展虚方法;3)被覆盖的虚方法参数列表不能更改。
- 动态方法(dymatic),和虚方法基本一致。
多态须要具有的条件:
- 基类定义了一个或多个虚方法
- 一个或多个派生类覆盖那些虚方法
- 一个实例变量(或参数),其类型是基类,但实际上它引用的是某个派生类的一个实例。
3、类型转换机制
类型:分为值类型,是一些简单的数据类型,如Char;引用类型,是一些复杂的类型,如类,对象接口。
向上转型:
- 向上转型是安全的,由于任何派生类都继承自基类,拥有基类的接口(方法)。
- 可以面向接口编程。
向下转型:
- 是一种强制转换,须指明确切类型。
- 在对象参数传递中,经过向上转型传递一个派生类对象参数,在获得该对象后,每每须要向下转型,恢复原来的面貌
- 在对象容器(TObjectList)中取出一个对象时,须要向下转型,不然获得TObject类型。
4、抽象接口机制
接口:规定”作什么“而无论”怎么作“,即它关心的是方法定义的参数,而不是具体实现。它分为宽接口,即delphi的类(一般是抽象类)和对象接口所声明的方法;窄接口,即对象接口,依附于类,可是不能直接实例化,也不能本身实现方法。
抽象类:为派生类定义公共接口,把方法的实现延迟到派生类中。不能实例化,用abstract 限定virtual,dynamic,或override。
抽象类的使用原则:
- 拥有尽量多的公共代码。
- 拥有尽量少的数据,以区别具体类。
接口对象的使用;
- 一般继承一个已有的接口来声明一个新接口。
- 接口继承自IInterface接口
|
相同点 |
不一样点 |
抽象类 |
不能实例化;提供抽象方法 |
一个类只能继承一个抽象类;派生类能够部分实现; |
对象接口 |
不能实例化;提供抽象方法 |
一个类能够继承多个接口;全部方法都是public;实现接口的类须要实现接口全部的方法; |
对接口而不是对实现编程:根据抽象类或对象接口中定义的接口来操纵对象。对象的类(class)定义了对象是怎样实现的,同时也定义了对象的内部状态和操做实现,而对象的类型只与它的接口相关。在delhi中,类既指对象的类型又制定了对象的实现,但对象接口仅指定对象的类型未指定对象的实现。