05.Delphi接口的多重继承深入
由于是IInterface,申明了SayHello,需要由继承类来实现函数,相对于03篇可以再精简一下
unit uSayHello; interface uses
SysUtils,
Windows,
Messages,
Classes,
Graphics,
Controls,
Forms,
Dialogs; type
// 说话类,由于是IInterface,申明了SayHello,需要由继承类来实现函数
ISpeakLanguage = interface(IInterface)
function SayHello: string;
end; ISpeakChinese = interface(ISpeakLanguage)
end; ISpeakEnglish = interface(ISpeakLanguage)
end; // TInterfacedObject相对于IInterface,添加了一些属性,更方便好用
TMan = class(TInterfacedObject)
private
FName: string;
public
// 名字
property Name: string read FName write FName;
end; TChinese = class(TMan, ISpeakChinese)
private
function SayHello: string;
end; TAmerican = class(TMan, ISpeakEnglish)
private
function SayHello: string;
end; TAmericanChinese = class(TMan, ISpeakChinese, ISpeakEnglish)
public
constructor create;
function SayHello: string;
end; implementation function TAmerican.SayHello: string;
begin
result := 'Hello!';
end; function TChinese.SayHello: string;
begin
result := '你好!';
end; 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.
05.Delphi接口的多重继承深入的更多相关文章
- zw版_Halcon图像库delphi接口文件
zw版_Halcon图像库delphi接口文件 Halcon图像库delphi接口文件,根据安装时用户设置的文件目录不同,会有所差异,笔者一般安装在delphi的import目录下. 参见:& ...
- delphi 接口Interface
学习 delphi 接口 一切都是纸老虎!!! 第四章 接口 前不久,有位搞软件的朋友给我出了个谜语.谜面是“相亲”,让我猜一软件术语.我大约想了一分钟,猜 出谜底是“面向对象”.我 ...
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
网上有篇文章<Delphi接口编程的两大陷阱>,里面提到接口的生存期管理的问题.但该文章里面提到的两个问题,其实都是对 Delphi 不理解导致的. 先说该篇文章中提到的第一个问题为什 ...
- 微软手写识别模块sdk及delphi接口例子
http://download.csdn.net/download/coolstar1204/2008061 微软手写识别模块sdk及delphi接口例子
- 03.Delphi通过接口实现多重继承的优化
在上一篇02中,写到的sayhello函数,需要使用2个接口参数,很繁琐.可以使用as参数,把多重继承的子类对象变成需要的对象 uSayHello代码如下 unit uSayHello; interf ...
- 02.Delphi通过接口实现多重继承
uSayHello类如下: unit uSayHello; interface type // 接口 IGreetable = interface ['{D91DDE09-0FC4-4FE9-AE0D ...
- 06.Delphi接口的不对等的多重继承
uSayHello代码如下 unit uSayHello; interface uses SysUtils, Windows, Messages, Classes, Graphics, Control ...
- C++解析(24):抽象类和接口、多重继承
0.目录 1.抽象类和接口 1.1 抽象类 1.2 纯虚函数 1.3 接口 2.被遗弃的多重继承 2.1 C++中的多重继承 2.2 多重继承的问题一 2.3 多重继承的问题二 2.4 多重继承的问题 ...
- java中接口与多重继承的关系
在Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和int ...
随机推荐
- ArcMap中对失量数据将具有相同的字段的元素进行合并
ArcMap=>工具栏=>Geoprocessing=>Dissolve,由于是将多个元素进行合并,所以还涉及到合并后的元素的字段保留以及字段取值的问题,在该工具中还可以自定义保存的 ...
- A - Bi-shoe and Phi-shoe 素数打表
A - Bi-shoe and Phi-shoe Bamboo Pole-vault is a massively popular sport in Xzhiland. And Master Phi- ...
- c++对象初始化(翁恺c++公开课[10])
c++对象初始化 就是去调用构造函数来完成初始化操作: 构造函数有无参数的构造函数.有参数构造函数.默认构造函数(编译器给我们实现的)...(拷贝构造函数之后说) 注意:默认构造函数只有在我们自己没有 ...
- keil Bulid Ouput窗口中PROGRAM SIZE项的具体含义
在Keil中编译工程成功后,在下面的Bulid Ouput窗口中会输出下面这样一段信息: Program Size: Code=6320 RO-data=4864 RW-data=44 ZI ...
- 谈谈spring mvc与struts的区别
1.Struts2是类级别的拦截, 一个类对应一个request上下文,SpringMVC是方法级别的拦截,一个方法对应一个request上下文,而方法同时又跟一个url对应,所以说从架构本身上Spr ...
- Windows Android SDK下载安装,配置,异常问题解决教程
团队编程项目终于开始了,相信大家都在如火如荼的准备的当中,这里念半整理了一份还比较全面的关于 Android SDK的下载安装的教程,当然如果你说你们小组的实验环境选择的是Android studio ...
- 设计模式课程 设计模式精讲 16-2,3 代理模式Coding-静态代理-1
1 代码演练 1.1 代码演练1(静态代理之分库操作) 1 代码演练 1.1 代码演练1(静态代理之分库操作) 需求: 订单管理,模拟前置后置方法,模拟分库管理 重点: 重点看订单静态代理,动态数据源 ...
- 1-1SpringBoot简介
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程.该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置.通过 ...
- Ubuntu安装docker并修改镜像仓库
首先切换到root用户 安装docker wget -qO- https://get.docker.com/ | sh 使用docker -v查看docker版本 创建daemon.json 并键入以 ...
- 回顾PHP:第一章:PHP基础语法
第一章:PHP基础语法 一.常量: 1.1.define()函数:define(‘R’,’5’,’true’); //R:常量名,5:常量值,true:常量名对大小写不敏感,为false时表示对常量名 ...