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.

最新文章

  1. SQL-truncate && delete && drop 的区别
  2. 【2016-10-13】【坚持学习】【Day4】【virtual 虚函数】
  3. PAT 1009. 说反话 (20) JAVA
  4. svg学习(六)line
  5. hdu 2528 Area
  6. [原创]java WEB学习笔记84:Hibernate学习之路-- -映射 一对一关系 ,基外键的方式实现
  7. 从原理上搞定编码-- Base64编码
  8. 3、Object对象的两大方法(hashCode-equals)总结
  9. 五分钟solr4.5教程(搭建、运行)
  10. zlib导致Ubuntu登录管理器失效
  11. Hive的MoveTask错误
  12. Spring2.5学习3.3_@Autowire注解实现手动装配
  13. 安装Windows2008操作系统 - 初学者系列 - 学习者系列文章
  14. 如何去掉Atom的右键菜单?
  15. vue :class的动态绑定
  16. JavaUtil_04_验证码生成器
  17. java输出各种学生成绩
  18. vue路由
  19. 没有基础的初学者学java怎样快速入门?超全的学习路线图
  20. 小程序for循环绑定每组数据的id,并通过id获取里面某个数组的值的方法

热门文章

  1. scp 常用命令总结
  2. FTP、SFTP、SCP的区别
  3. C语言程序编译
  4. java问题 2019
  5. js加密(十一)yhz566 md5
  6. Scrapy采集某小说网站的全部小说
  7. MVC PartialView使用
  8. 八 SpringMVC文件上传,必须设置表单提交为post
  9. redis队列与RabbitMQ队列区别
  10. hdu 1086 You can Solve a Geometry Problem too 求n条直线交点的个数