Delphi的OverRide、OverLoad和Virtual方法
1.方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。
如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。
子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被“屏蔽”了。
如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
2. Delphi 的函数覆盖(Override)与重载(overload)
而Delphi 就是用override 关键字来说明函数覆盖的。被覆盖的函数必须是虚(virtual)的,或者是动态(dynamic)的,也就是说该函数在声明时应该包含这两个指示字中的一个,比如:
procedure Draw; virtual;
在需要覆盖的时候,只需要在子类中用override 指示字重新声明一下就可以了。
procedure Draw; override;
3.virtual 虚类型
dynamic 动态
overload 重载
override 重写
4.★★★关于方法定义关键字的说明:
如果在过程定义声明时包括了的关键字的含义:
static 表示是静态方法;静态方法是方法的缺省类型,不能被覆盖;
virtual 表示是虚拟方法;
dynamic 表示是动态方法;
这两类方法的共同点是都可以被覆盖(override),区别仅在于运行时调用方法时的派发机
制,virtual方法为执行速度做了优化,而dynamic方法则为代码大小做了优化;经常被覆盖的
方法应该定义为virtual方法;
message 表示是消息处理方法;在关键字message后面的值指明了这个方法要响应的消息;
用消息处理方法来响应Windows的消息,这样就不用直接来调用它;
override 表示是覆盖方法;要求祖先类中必须有该方法的定义,并且参数的顺序和类型
及返值的类型必须匹配;用于扩展祖先类中的该方法而不是取代它(如不调用祖先类中的该方
法则等同于取代);
overload 表示是重载方法;用于一个类中有许多同名的方法带着不同的参数表的情形;
(属性的读写方法不能被重载);
abstract 表示是抽象方法;是没有实现的方法,并且必须是virtual或dynamic方法,即
在abstract前面必须有virtual或dynamic关键字,其实现部分在派生类中;如
procedure DoSomething; virtual; abstract;
reintroduce表示是重新声明的方法;用于方法的名称与祖先类中的某个方法名称相同的情形;
5.virtual 和 dynamic定义的虚函数,都是为了子类override用的,
只不过它们的实现不一样
vitrual 占用的空间大点,但速度快些。dynamci正好相反.
stdcall是一种调用方式,标明了参数入stack的顺序和清除的方式,具体可看
Delphi的帮助.
相关推荐
Delphi面向对象:overload与override[文].pdf
override and overload difference
override abstract virtual interface比较
Override Overload Overwrite 马克-to-win Java视频
有一些收集的demo演示,可以很好的立即其不同情况的使用和区别
C#中方法的重写(override)和重载(overload)的区别
本文详细地描述了overload 和override的区别
overload and override.txt的区别重载和隐藏的区别
静态(static)方法重写(override)
new、abstract、virtual、override,sealed关键字区别和使用代码示例
为了覆盖一个方法,在派生类的声明中用override代替virtual或dynamic。用了override后,编译器就会用新的方法替换VMT中原先的方法,而原先的方法也还存在,而如果用override再次声明一个静态方法,则是真正的覆盖,...
下面小编就为大家带来一篇深入理解C#中new、override、virtual关键字的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
方法的重写(Overriding)和重载(Overloading)是Java多态性的不同表现,想要了解更多请参考本
Overload(重载):在C++程序中,可以将语义、功能相似的几个函数用同一个名字表示,但参数或返回值不同(包括类型、顺序不同),即函数重载。(1)相同的范围(在同一个类中);(2)函数名字相同;(3)参数不同;...
在 Cat 类中,使用相同的名称和参数列表来重新定义了 move() 方法,并且使用 @Override 注解向编译器说明这是一个重写方法。 class Animal { public void move() { System.out.println("动物可以移动"); } } ...
Delphi Post Send发送和屏蔽消息,//在应用程序层处处理消息 procedure OnAppmessage(var msg:TMsg;var handled:boolean); //重载WndProc方法,在窗口过程处处理消息 procedure WndProc(var msg:TMessage);...
深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。 对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。实例配有光盘,...
深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。 对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。实例配有光盘,...
深入剖析了Object Pascal程序语言,包括指针、数据结构以及有关Override 和Overload函数的语法等。 对面向对象的观点详述了Delphi VCL组件的属性、方法及事件,且在数据库设计方面辅以应用的范例。实例配有光盘,...
重载overload,这个概念是大家熟知的。在同一可访问区内被声名的几个具有不同参数列的(参数的类型、个数、顺序不同)同名函数,程序会根据不同的参数列来确定具体调用哪个函数,这种机制就是重载