IInterface表示申明了一些函数,自己本身没有实现部分,需要由继承它的类来实现函数

uSayHello代码如下

unit uSayHello;

interface

uses
SysUtils,
Windows,
Messages,
Classes,
Graphics,
Controls,
Forms,
Dialogs; type
// IInterface表示申明了一些函数,自己本身没有实现部分,需要由继承它的类来实现函数
ISpeakChinese = interface(IInterface)
function SayHello: string;
end; // IInterface表示申明了一些函数,自己本身没有实现部分,需要由继承它的类来实现函数
ISpeakEnglish = interface(IInterface)
function SayHello: string;
end; // 人类
TMan = class(TInterfacedObject)
private
// 姓名
FName: string;
public
property Name: string read FName write FName;
end; // 中国人,继承了人类和说汉语
TChinese = class(TMan, ISpeakChinese)
private
// ISpeakChinese中定义的函数,序号在继承类中实现
function SayHello: string;
end; TAmerican = class(TMan, ISpeakEnglish)
private
// ISpeakChinese中定义的函数,序号在继承类中实现
function SayHello: string;
end; // 美籍华人 ,继承了人类,汉语和英语
TAmericanChinese = class(TMan, ISpeakChinese, ISpeakEnglish)
public
constructor create;
// ISpeakChinese中定义的函数,序号在继承类中实现
function SayHello: string;
end; implementation {
********************************** TAmerican ***********************************
}
function TAmerican.SayHello: string;
begin
result := 'Hello!';
end; {
*********************************** TChinese ***********************************
}
function TChinese.SayHello: string;
begin
result := '你好!';
end; {
******************************* TAmericanChinese *******************************
}
constructor TAmericanChinese.create;
begin
name := 'Tom Wang';
end; function TAmericanChinese.SayHello: string;
var
Dad: ISpeakChinese;
Mum: ISpeakEnglish;
begin
Dad := TChinese.create;
Mum := TAmerican.create;
// 调用说中文和说英文方法
result := Dad.SayHello + Mum.SayHello;
end; end.

界面代码如下

unit frmMain;

interface

uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls,
ExtCtrls; type
TForm1 = class(TForm)
Button1: TButton;
LabeledEdit1: TLabeledEdit;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end; var
Form1: TForm1; implementation uses
uSayHello; {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject);
var
Tom: TAmericanChinese;
begin
// 创建美籍华人类
Tom := TAmericanChinese.Create;
try
LabeledEdit1.text := Tom.Name;
// 输出
ShowMessage(Tom.sayhello);
finally
Tom.Free;
end;
end; end.

04.Delphi通过接口IInterface实现多重继承的更多相关文章

  1. Delphi的基于接口(IInterface)的多播监听器模式(观察者模式 )

    本文来自:http://www.cnblogs.com/hezihang/p/6083555.html Delphi采用接口方式设计模块,可以降低模块之间的耦合,便于扩展和维护.本文提供一个实现基于接 ...

  2. Delphi 的接口机制——接口操作的编译器实现过程(2)

    接口对象的内存空间 假设我们定义了如下两个接口 IIntfA 和 IIntfB,其中 ProcA 和 ProcB 将实现为静态方法,而 VirtA 和 VirtB 将以虚方法实现: IIntfA =  ...

  3. Delphi 的接口机制——接口操作的编译器实现过程(1)

    学习COM编程技术也快有半个月了,这期间看了很多资料和别人的程序源码,也尝试了用delphi.C++.C#编写COM程序,个人感觉Delphi是最好上手的.C++的模版生成的代码太过复杂繁琐,大量使用 ...

  4. delphi中接口的委托和聚合

    Delphi的TRegistry注册表类 方法详解 Delphi的接口编程入门 delphi中接口的委托和聚合 2009-09-27 10:44:44|  分类: 默认分类 |  标签: |举报 |字 ...

  5. 03.Delphi通过接口实现多重继承的优化

    在上一篇02中,写到的sayhello函数,需要使用2个接口参数,很繁琐.可以使用as参数,把多重继承的子类对象变成需要的对象 uSayHello代码如下 unit uSayHello; interf ...

  6. 02.Delphi通过接口实现多重继承

    uSayHello类如下: unit uSayHello; interface type // 接口 IGreetable = interface ['{D91DDE09-0FC4-4FE9-AE0D ...

  7. 基于Delphi的接口编程入门

    为什么使用接口? 举个例子好了:有这样一个卖票服务,电影院可以卖票,歌剧院可以卖票,客运站也可以卖票,那么我们是否需要把电影院..歌剧院和客运站都设计成一个类架构以提供卖票服务?要知道,连经理人都可以 ...

  8. Delphi采用接口实现DLL调用

    Delphi使用模块化开发,可以采用DLL或者BPL,两者的区别是BPL只能被同版本的Delphi使用,DLL可以被不同版本和不同开发工具的开发的软件调用. 因此我们的软件大多使用Delphi作为界面 ...

  9. Delphi面向对象---接口

    从Delphi3开始支持接口.接口定义了能够与一个对象进行交互操作的一组过程和函数.对一个接口进行定义包含两个方面的内容: 1)一方面是实现这个接口 2)另一方面是定义接口的客户 一个类能够实现多个接 ...

随机推荐

  1. 吴裕雄 Bootstrap 前端框架开发——Bootstrap 显示代码:变量赋值

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  2. Mongodb - 解决 ( aggregate聚合管道 ) $match 根据 id 匹配 返回 [ ] 的问题

    需要对 id 进行转换 const mongoose = require('mongoose') var ObjectId = mongoose.Types.ObjectId;   await Use ...

  3. Linux centosVMware 负载均衡集群介绍、LVS介绍、LVS调度算法、LVS NAT模式搭建

    一.负载均衡集群介绍 主流开源软件LVS.keepalived.haproxy.nginx等 其中LVS属于4层(网络OSI 7层模型),nginx属于7层,haproxy既可以认为是4层,也可以当做 ...

  4. PostgreSQL存取jsonb

    从PostgreSQL 9.3开始,json就成了postgres里的一种数据类型,也就是和varchar.int一样,我们表里的一个字段的类型可以为json了. 与此同时,postgres还提供了j ...

  5. Python 基础之循环结构for及break pass continue

    一.for 循环 #循环 变量 迭代 都是一个意思#把列表里面的元素意义的拿出来就是遍历listvar = ["one","two","three&q ...

  6. SSM(Spring-SpringMvc-Mybatis)练习

    1.总结 https://pan.baidu.com/s/1kXlCf4r  密码:hv6v 2.代码 https://pan.baidu.com/s/1pNgKph5  密码:6rcm 3.资料 h ...

  7. JSON传输图片帮助类

    JSON传输图片帮助类 2014-05-27 16:11:22|  分类: Java |  标签:解决方案  java  json  |举报|字号 订阅     原理:将图片转换为字节流,再将字节流用 ...

  8. 吴裕雄--天生自然HADOOP操作实验学习笔记:qq好友推荐算法

    实验目的 初步认识图计算的知识点 复习mapreduce的知识点,复习自定义排序分组的方法 学会设计mapreduce程序解决实际问题 实验原理 QQ好友推荐算法是所有推荐算法中思路最简单的,我们利用 ...

  9. Python作业篇 day03

    ###一.有变量name = 'aleX leNb',完成如下的操作 name = 'aleX leNb' name1 = ' aleX leNb ' #1.移除name1 变量对应的值两边的空格 , ...

  10. linux系统下安装两个或多个tomcat(转)

    tomcat不用添加到环境变量中 直接解压两个tomcat   来到第二个tomcat的conf目录下 打开server.xml更改端口: 修改server.xml配置和第一个不同的启动.关闭监听端口 ...