Delphi中的接口和抽象类
参考:http://blog.csdn.net/xinzheng_wang/article/details/6058643
接口:Interface
Delphi中接口中的关键字Interface,但是它和Pascal单元中的Interface没有任何联系
一、抽象类
Delphi中的抽象类只定义行为的类,它规定了由此派生的类必须具备的某些行为。但是抽象类不实现这些行为,而必须由其派生类去实现这些行为。所以它只是一种“抽象”的类,而且,我们无法为抽象类创建实例。比如这段代码
TCode = class
protected
function DeCode(Src: String): String; virtual; abstract;
function EnCode(Src: String): String; virtual; abstract;
end;
这段代码定义了一个有密码的抽象类,它规定了该类的两个行为,即编码和解码。但它只是规定了这两个行为而没有去实现它们,因为具体到不同的加密体系,它们的编码和解码的行为不一样,所以这两个行为交由具体的派生类去实现。
抽象类只定义了行为而没有去实现它们,所以它是“抽象”的。
二、接口和抽象类的不同
接口也定义了一系列的行为而没有去实现这些行为,这一点上和抽象类是一样的,准确的说,接口只是规定了接口的提供者和接口的使用者之间的协议
既然有了抽象类为什么还要有接口?那一定是接口和抽象类有不同的地方,正式这种不同使它们应用在不同的场合或者满足不同的需求。弄清这些不同之处的过程,也就是我们理解借口这个概念的过程
我们以同样的内容来声明一个接口
ICode = interface
function DeCode(Src: String): String;
function EnCode(Src: String): String;
end;
从上面的形式看,接口和抽象了有点区别
1)接口都以“I”打头(类以“T”打头)
2)接口的关键字是interface(类的关键字是class)
3)因为接口中的所有的函数和过程都是虚的,所以没有必要加上virtual的关键字
但是以上的区别只是形式上的,还有一些实质上的区别
1)对接口创建实例的代码在Delphi中是非法的,在编译期间会出现异常
2)接口中所有的方法都是共有的,因此不能对接口中的域进行定义
3)在接口中不能申明变量,这是它和类的一个很大的区别,因为接口只定义了行为而对实现这些行为不做规定,但是如果允许在接口中定义变量,则就在某种程度上干预域或者限制实现行为的方法
4)接口是不变的,也就是说,一旦声明并公开了某个接口之后,就不允许再对它进行修改,我们淘增加或删除它所规定的行为,就只能另外声明一个接口。
5)和4)有关,所以一个类可以实现一个接口,但是只能继承一个类
6)抽象了可以有成员变量,可以自己实现其中的一些成员函数,也可以将方法定义为 virtual;abstract; 然后由其派生类实现
但是接口不能有成员变量,而且也不能自己实现接口中的任何一个方法,只能由实现它的类来具体实现这些方法
三、接口的GUID
GUID是“全球唯一标识符”的缩写,它借助复杂的算法而保证在全球范围内的唯一性。每个接口都有一个GUID,系统据此注册和调用接口。事实上,上面那段声明接口的代码是不完整的,完整的声明代码看上去应该是这样的:
ICode = interface
['{56E57F5F-5DD8-42FC-8D27-C35968C4474E}']
function Decode(Src: String): String;
function Encode(Src: String): String;
end;
好在我们不必去关心GUID是怎样产生的,当我们需要给一个接口创建一个GUID时,我们只要在Delphi的IDE中同时按下Ctrl、Shift和G三个键,光标所在的位置就会出现一个GUID。
其实这不是Delphi自己胡编出来的GUID,而是Delphi调用Windows的API函数:CoCreateGuid创建的,它借助开放软件基金会(OSF)定义的算法,从统计学的角度上说,能保证GUID的全球唯一性
Delphi中的接口和抽象类的更多相关文章
- Java中的接口与抽象类的区别
由于随着jdk版本的更新,在jdk1.8时,接口也增强了,所以我们分别来说明一下. (1)jdk1.8之前 在jdk1.8之前,接口里面只能定义抽象方法和常量:而抽象类比普通类有一点不同,就是抽象类里 ...
- 浅谈C#中的接口和抽象类
C#中接口为"其他方面互不相干"的类型提供公共的服务和特征:C#中class只支持但继承,使用接口却支持多继承,例如:C#中System.String是从System空间中的4个i ...
- 【转载】JAVA中综合接口和抽象类实现的一种“抽象接口”
Muscleape个人总结:(这里的抽象接口是指:使用一个抽象类实现一个接口,是两部分结构) 使用一个抽象类直接实现接口,将接口中的方法区分为实现类必须要实现的和选择性实现的,其他需要实现接口的类型通 ...
- Java中的接口和抽象类
接口和抽象类是Java设计中最基本的概念,它们都不能实例化对象,都可以实现多态,也都能用来创建匿名内部类.但实际使用上还有很多的不同. 两者的语法定义不同,对应的设计抽象关系也不同,接口主要是对行为的 ...
- java中的接口和抽象类的区别
1.接口从用户的角度(使用实现的代码)看问题. 2.接口由编译器强制的一个模块间协作的合约. 3.无成员变量. 4.成员函数只能声明不能实现,(jdk1.8中的default 方法可以有方法体). 接 ...
- Java中的接口和抽象类(转)
在面向对象的概念中,我们知道所有的对象都是通过类来描述的,但是并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类. 抽象类往往用来表征我们在对问题 ...
- vs中找到接口和抽象类的具体实现类
如何找到接口和抽象类的具体实现类 1,可以使用:ctrl+k clrl+t打开调用层次结构窗口: 2,移动到实现节点: 3,然后可以转到具体实现: 第二种安装插件 ReSharper 第三种方法: 在 ...
- C#中的接口和抽象类学习
今天学习了接口和抽象类,但并没有很好的进行整理,所以现在写的时候,脑子里多少有点乱乱的,先从接口开始吧. interface 接口,规定了所有派生类的需要遵循的标准,接口定义了需要做些什么,但是没有具 ...
- Java中:接口,抽象类,内部类
Java8中的接口 public interface Output { //接口里定义的成员变量只能是常量 //默认使用public static final修饰 int MAX_CACHE_LINE ...
随机推荐
- Kali Linux渗透基础知识整理(三):漏洞利用
漏洞利用阶段利用已获得的信息和各种攻击手段实施渗透.网络应用程序漏洞诊断项目的加密通信漏洞诊断是必须执行的.顾名思义,利用漏洞,达到攻击的目的. Metasploit Framework rdeskt ...
- Droid4x快照还原
一.问题描述 1. Droid4x还原快照可以通过VirtualBox 先还原快照 2. virtualbox 还原快照之后 如果没有用virtualbox启动 并关闭 而是直接启动Droid ...
- SX学SX内容 笔记?
某帖子笔记1 主要还是从三体吧某精品贴里看来的... 集合论 集合就是一堆东西...满足 1) 集合中的元素互异(即每种只有一个) 2) 集合中的元素无序(不是一个数组,集合中的元素没有显然的排序法则 ...
- METEOR 及ANGULARJS
最近学习:METEOR 及ANGULARJS,收藏相关资源: 1.METEOR 中文书:http://zh.discovermeteor.com/ 2.METEOR 及ANGULARJS 联合开发:h ...
- Javascript之setTimeout
参考:http://codethoughts.info/javascript/2015/07/06/javascript-callbacks/
- 用C语言把双向链表中的两个结点交换位置,考虑各种边界问题。
用C语言把双向链表中的两个结点交换位置,考虑各种边界问题. [参考] http://blog.csdn.net/silangquan/article/details/18051675
- centos7.0改变用户创建目录组权限
centos7.0改变用户创建目录组权限可通过umask进行设置. 临时改变可通过umask命令进行设置 永久性改变,可通过修改~/.bash_profile的方式进行调整.
- CEF3开发者系列之JS与C++交互之一
JS与Native交互是相对于比较困难的技术,在学习这门技术之前,我们先了解下浏览器内核中的JS引擎与chromium内核的V8引擎相关知识.在浏览器应用中,JS与本地代码互相调用,得益于浏览器内核对 ...
- CMake入门以及学习笔记
使用cef3替代chromium内核开发产品过程中,第一次接触到系统构建,使用了最常见的CMake.CMake虽然在构建系统中用的比较多,但是使用到的程序员还是很少的.现在在国内能找到的相关资料和博客 ...
- 问题 A: 【动态规划】采药_二维数组_一维数组
问题 A: [动态规划]采药 时间限制: 1 Sec 内存限制: 64 MB提交: 35 解决: 15[提交][状态][讨论版] 题目描述 山洞里有一些不同的草药,采每一株都需要一些时间,每一株也 ...