重载与重写Delphi

转载 2012年03月29日 14:52:24

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中对override(重写)和overload(重载)的一些看法

 重写就是用现在的方法覆盖了继承过来的方法,重载就是在不改变继承过来的方法的基础上重新添加一个方法名字一样,但参数或返回值是不一样的。下面举个例子:unit Unit1;interfacetype T...
  • xiao_jun_0820
  • xiao_jun_0820
  • 2008年03月01日 18:36
  • 5474

Delphi--抽象方法、重载、覆盖。继承实例

  • 2009年02月16日 10:28
  • 168KB
  • 下载

重载与重写Delphi

1.方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现...
  • jiangwzh
  • jiangwzh
  • 2012年03月29日 14:52
  • 927

Delphi的运算符重载

使用Delphi编写游戏,唯一没有C++方便的就是不支持运算符重载。当你编写有关向量或者矩阵计算的程序时,不支持运算符重载的Delphi使用起来是很费劲的。 但是Delphi 2006改变了这种局面...
  • kevinzhaoyp
  • kevinzhaoyp
  • 2012年03月29日 15:53
  • 1802

重载和重写的总结

重写是子类的方法覆盖父类的方法,要求方法名和参数都相同 重载是在同一个类中的两个或两个以上的方法,拥有相同的方法名,但是参数却不相同,方法体也不相同,最常见的重载的例子就是类的构造函数. ...
  • GUO18735177413
  • GUO18735177413
  • 2015年01月16日 15:34
  • 758

重载与重写Delphi

1.方法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现...
  • sforiz
  • sforiz
  • 2010年03月22日 02:35
  • 3046

Delphi继承、属性、重载

1.      继承   类名称 = class(父类名称)            public                 公共类元素>            private私有类元素>    ...
  • chenyq2008
  • chenyq2008
  • 2008年01月30日 22:47
  • 1264

Delphi继承、属性、重载

1.      继承   类名称 = class(父类名称)            public                 公共类元素>            private私有类元素>    ...
  • lanyus
  • lanyus
  • 2006年02月24日 15:34
  • 2357

java中的继承和多态以及重载和重写

继承(inheritance) 简单的说,继承就是在一个现有类型的基础上,通过增加新的方法或者重定义已有方法(下面会讲到,这种方式叫重写)的方式,产生一个新的类型。继承是面向对象的三个基本特征--封...
  • ls5718
  • ls5718
  • 2016年06月02日 10:19
  • 3058

PHP的重写和重载

重写   重写又叫覆盖,就是将从父类继承下来的属性或方法重新“定义”——就是从新写。      下级的可见性应该不低于上级的可见性。   方法的参数形式应该跟父类的一致。   私有属...
  • L1837435964
  • L1837435964
  • 2016年10月10日 15:53
  • 382
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:重载与重写Delphi
举报原因:
原因补充:

(最多只允许输入30个字)