`
murongzilin
  • 浏览: 5722 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Delphi的OverRide、OverLoad和Virtual方法

阅读更多

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

    Delphi面向对象编程中,overload和override是两个非常重要的概念,它们都是面向对象编程的基础概念。本文将详细介绍overload和override的概念、应用场景及实现方法。 一、overload overload是指在同一个类中定义多...

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

    在这个实例中,`TDerivedClass`不仅拥有`TBaseClass`的所有属性和方法,还能添加自己的属性和方法,或者对父类的方法进行扩展和修改。通过熟练掌握这些面向对象的概念,开发者可以在Delphi中构建出强大而灵活的软件...

    Delphi实现多态

    在Delphi中,接口(Interfaces)和虚方法(Virtual Methods)是实现动态多态的关键。 **一、静态多态** 静态多态主要通过函数重载(Overloading)和运算符重载(Overriding)实现。例如,可以定义两个同名但参数...

    delphi动态虚拟覆盖重载重定义的区别

    DELPHI 中,方法的类型主要有静态方法(Static)、虚拟方法(Virtual)和动态方法(Dynamic),这三种方法在调用和实现上有着显著的区别。 静态方法是默认的方法类型,其调用方式与普通过程和函数类似。由于编译器...

    delphi题库

    在Object Pascal中,用`Virtual`标识符定义可被覆盖的方法,`Override`用于在派生类中重写父类方法。 【重载方法】 当在派生类中新增与父类中方法名称相同但参数列表不同的方法时,使用`Overload`指示符。 【结构...

    Delphi7.完美经典

    7-6-1 Override 适用的情况——Virtual与 Dynamic的成员函数 7-6-2 Override成员函数的定义语法 7-6-3 Virtual成员函数与动态绑定(Dynamic Binding) 7-6-4 覆盖(Overriding)与隐藏(Hiding)的差别 7-6-5 Override...

    深入00P编程[delphi]

    4. **多态性**:涵盖虚函数(virtual)、抽象类(abstract class)和接口(interface)如何实现多态,以及`override`和`overload`关键字的应用。 5. **构造函数与析构函数**:说明如何使用构造函数初始化对象,以及...

    Delphi7.完美经典.part1

    4-2 方法(Method) 7-4-3 属性(Property) 7-5 类的继承 7-5-1 继承的意义与优点 7-5-2 子类成员的存在方式 7-6 成员函数的Override及 Overload 7-6-1 Override 适用的情况——Virtual与 ...

    Delphi最新三层源码

    随便说说最近项目中的三层架构吧。讲点实际的东西。我最讨厌空讲道理。... 呵呵,下次再讲讲业务逻辑方面吧,希望给做DELPHI三层的兄弟一个参考。我的QQ: 11718111 Email: wu_yanan2003@yahoo.com.cn

    面向对象程序设计基础优秀文档.ppt

    类包含数据成员(字段)和方法,数据成员定义对象的状态,方法定义对象的行为。 对象是类的实例,它是实际存在的数据结构,可以通过创建类的实例来使用类中定义的成员。在Delphi中,对象声明如`Button1: TButton;`...

    delphi 装饰模式

    virtual; end; TFinery = class(TPerson) protected Component:TPerson; public procedure Decorator(Acomponent:TPerson); procedure Show;override; end; TShirts = class(TFinery) public procedure...

    Delphi之Pascal语言中的关键字及保留字汇总

    94. `with`:用于简化访问对象的属性和方法。 95. `write`:属性访问器,用于设置属性值。 96. `writeonly`:在dispatch接口中,表示只写属性。 97. `xor`:布尔逻辑运算符,表示两个条件中有一个为真时结果为真...

Global site tag (gtag.js) - Google Analytics