文档章节

理解 Delphi 的类(七) - 认识类的多态

涂孟超
 涂孟超
发布于 2014/09/26 15:30
字数 383
阅读 6
收藏 0
什么是多态? 我的理解就是: 同样一个方法, 在不同的对象里会有不同的实现, 仅此而已.
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
  end;

  //定义了三个类, 后两个类都继承与第一个类 TBass
  TBass = class
    procedure alert; virtual; {加上 virtual 指示字, 说明这个方法可能会被修改(或叫覆盖)}
    {这种方法叫虚方法}
  end;

  TChild1 = class(TBass)
    procedure alert; override; {override 表示修改父类的同名方法}
  end;

  TChild2 = class(TBass)
    procedure alert; override;
  end;


var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TBass }
procedure TBass.alert;
begin
  ShowMessage('is Bass');    {同一个方法, 在不同类里有不同的实现}
end;

{ TChild1 }
procedure TChild1.alert;
begin
  ShowMessage('is TChild1'); {同一个方法, 在不同类里有不同的实现}
end;

{ TChild2 }
procedure TChild2.alert;
begin
  ShowMessage('is TChild2'); {同一个方法, 在不同类里有不同的实现}
end;


//测试1:
procedure TForm1.Button1Click(Sender: TObject);
var
  bass: TBass; {定义 TBass 的变量}
begin
  bass := TBass.Create;
  bass.alert; {is Bass}
  bass.Free;
end;

//测试2:
procedure TForm1.Button2Click(Sender: TObject);
var
  bass: TBass;            {注意还是定义 TBass 的变量}
begin
  bass := TChild1.Create; {但这里是通过 TChild1 建立对象}
  bass.alert; {is TChild1}
  bass.Free;
end;

//测试3:
procedure TForm1.Button3Click(Sender: TObject);
var
  bass: TBass;            {注意还是定义 TBass 的变量}
begin
  bass := TChild2.Create; {但这里是通过 TChild2 建立对象}
  bass.alert; {is TChild2}
  bass.Free;
end;

{总结: 现在同是 bass.alert 方法, 通过不同对象的实现, 有了不同的功能, 这就是多态!}
end.

 
 
 
 
 

 

 

  

本文转载自:http://www.cnblogs.com/del/archive/2008/01/11/1034529.html

涂孟超
粉丝 12
博文 2011
码字总数 14107
作品 0
深圳
程序员
私信 提问
java基础-多态是什么?

1.1 什么是多态? 多态是继数据抽象和继承之后的第三种基本特征。 定义:多态(Polymorphism)按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。引用C...

KongFanhao
2016/09/18
47
0
JAVA面向对象理解

做测试也挺久了,大学时没有认真学会java,现在各个企业对测试人员要求越来越高,掌握编程语言的已经成了必备的技能;自己也断断续续学了很多次java,但都没有好好得把java学好,在要面临跳槽...

yangiris
2015/07/29
0
0
Objective-C文字总结

多态按字面的意思就是“多种状态”。在面向对象语言中,接口的多种不同的实现方式即为多态。多态性是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据...

Anyi_安一
2015/10/13
53
0
Delphi 面向对象编程 第一章

面向过程:程序和数据是分开的,即程序员所看到的就是过程或者函数的集合以及单独的一批数据。 面向对象:程序被看作是相互协作的对象的集合,每个对象都是类的实例,所有的类构成一个通过继...

CODER-SU
2011/12/19
143
0
C++ —面向对象之多态的实现与应用

多态 大家应该都听过C++三大特性之一多态,那么什么多态呢?多态有什么用?通俗一点来讲-> 多态性可以简单地概括为“一个接口,多种方法”,程序在运行时才决定调用的函数,它是面向对象编程...

Dawn_sf
2017/04/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

查看线上日志常用命令

cat 命令(文本输出命令) 通常查找出错误日志 cat error.log | grep 'nick' , 这时候我们要输出当前这个日志的前后几行: 显示file文件里匹配nick那行以及上下5行 cat error.log | grep -C ...

xiaolyuh
37分钟前
5
0
六、Java设计模式之工厂方法

工厂方法定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,工厂方法让类的实例化推迟到子类中进行 类型:创建型 工厂方法-使用场景: 创建对象需要大量重复的代码 ...

东风破2019
44分钟前
5
0
win服务器管理遇到的一系列问题记录

有些小伙伴在使用iis7远程桌面管理工具的时候总是会遇到一系列的问题,下面就是为大家介绍一下服务器日常管理过程中出现的问题及我的解决办法和心得。希望能帮到大家。   拒绝服务器重新启...

1717197346
51分钟前
6
0
flutter 剪切板 复制粘贴

复制粘贴功能 import 'package:flutter/services.dart'; Clipboard.setData(ClipboardData(text:_text));Clipboard.getData;...

zdglf
53分钟前
4
0
如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题?

面试题 如何保证消息的可靠性传输?或者说,如何处理消息丢失的问题? 面试官心理分析 这个是肯定的,用 MQ 有个基本原则,就是数据不能多一条,也不能少一条,不能多,就是前面说的重复消费...

米兜
54分钟前
4
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部