Go homepage(回首页) Upload pictures (上传图片) Write articles (发文字帖)
The author:(作者)aaapublished in(发表于) 2014/7/19 0:12:40 delphi类的多态性
delphi类的多态性
多态性在Object Pascal 语言中定义的类的方法通常是“静态”的,也就是在编译和链接阶段就确定了对象方法的调用地址。面向对象的程序设计语言还可以在运行时才确定对象方法的调用地址,这种调用函数的方式叫做多态性,有时也称为动态联编或滞后联编。在Object Pascal 语言中,多态性是通过虚拟方法或动态方法实现的。通常,可以将类中的方法定义为下面的3 种方式:• 静态方法。• 虚拟方法。• 动态方法。在默认情况下定义的方法为静态方法,静态方法的调用地址在编译和链接的过程中就确定了。在类中,如果定义了一个方法,在它的派生类中也可以定义一个同样的方法。对于静态方法,通常叫做“静态重载”。下面的例子说明了静态方法Infor 的调用情况: program Project1;{$APPTYPE CONSOLE}typeTPerson = class //人类procedure Infor; //显示信息end;TEmployee = class(TPerson) //职员类procedure Infor; //显示职员信息end;procedure TPerson.Infor; //显示调用的是TPerson 类的InforbeginWriteln ( ’TPerson.Infor’);end;procedure TEmployee.Infor; //显示调用的是TEmployee 类的InforbeginWriteln(’TEmployee.Infor’);end;varP1: TPerson; //声明一个人类的变量E1: TEmployee; //声明一个职员类的变量beginP1:=TPerson.Create ;P1.Infor; //调用的是TPerson 类的InforP1.Destroy;P1:=TEmployee.Create;P1.Infor; //调用的是TPerson 类的InforTEmployee(P1).Infor; //调用的是TEmployee 的InforP1.Destroy;E1:=TEmployee.Create;E1.Infor; //调用的是TEmployee 类的InforE1.Destroy;end.运行结果如下: TPerson.InforTPerson.InforTEmployee.InforTEmployee.Infor可以看到,在“静态重载”的情况下,Infor 的调用是根据对象的类型来确定的。虚拟方法和动态方法也可以在派生类中被重载,通常称为“动态重载”。对象方法具体使用的并不是变量声明时指定的类的类型。
赞