Delphi Delphi 中的overload 重载override 覆盖abstract(抽象方法)方法术语
Delphi Delphi 中的overload 重载override 覆盖abstract(抽象方法)方法术语
overload 重载
名字相同,而参数类型或者数量不同的过程,称之为重载。
override 覆盖方法
父类声明时必须是虚方法(virtual)或者是动态方法(dynamic)
虚方法(virtual)与动态方法(dynamic)唯一的不同是其实现方法,跟调用方法。
Delphi编译器会自动维护用于添加虚方法的虚方法表(VMT)和用于添加动态方法的动态方法表(DMT)
虚方法表(VMT)存放的是类及其基类声明的所有虚方法的指针。每一个类都有唯一的VMT,每一个类或者其祖先类的虚方法在VMT里都有一个入口。无论一个类是否有自己定义的虚方法,只要它继承了祖先类的虚方法,它也会有自己的VMT来识别一个类。实际上一个类引用就是指向类的VMT指针,调用classtype方法则返回指向VMT的指针。
如果继承的层次很深的话VTM会变的异常庞大,因此Delphi提供了一个DMT机制。每一个类的DMT中只维护部分的动态方法,也就是说DMT仅列出了该类所声明的动态方法,它并不包括从祖先类哪儿继承来的方法。解决了上面的问题,但是时间效率和可读性差了不少。
dynamic方法一般用于:
-
虚函数很少或者几乎不用改写的情况。
-
基类需要经常更新,而派生类不方便同步更新,对效率要求又不高的情况。
-
如果系统的类体系本身过于庞大,有需要在继承树根部的类里声明需要虚方法的。
声明方法时,vivtual 和dynamic限定符必须位于reintroduce和voerload限定符后,abstract(抽象方法)限定符之前。
abstract(抽象方法)
abstract(抽象方法)必须是一个虚方法或者是动态方法,只是定义了接口,没有实现。而在其继承的子类中去实现。如果不想在派生类中去实现一个基类的抽象方法,就可以在派生类定义中忽略这个方法或者用verride和abstract限定符来声明这个方法。但是,忘记在派生类中实现抽象方法或者用抽象类来创建实例,此时编译器会发出一个警告。抽象类创建一个对象,并调用他的抽象方法,Delphi会调用AbstractErrorProc过程或产生一个运行时错误210(EAbstractError)
inherited 是指继承父类方法。
有了覆盖的方法,才实现了类的多态。

浙公网安备 33010602011771号