原帖地址:http://www.cnblogs.com/thcjp/archive/2007/04/20/721587.html

首先要感谢 anytao.cnblogs.com ,因为下面总结这部分我是直接粘贴复制他的,呵呵!

3.1 相同点

  • 都不能被直接实例化,都可以通过继承实现其抽象方法。
  • 都是面向抽象编程的技术基础,实现了诸多的设计模式。

3.2 不同点

  • 接口支持多继承;抽象类不能实现多继承。
  • 接口只能定义抽象规则;抽象类既可以定义规则,还可能提供已实现的成员。
  • 接口是一组行为规范;抽象类是一个不完全的类,着重族的概念。
  • 接口可以用于支持回调;抽象类不能实现回调,因为继承不支持。
  • 接口只包含方法、属性、索引器、事件的签名,但不能定义字段和包含实现的方法;抽象类可以定义字段、属性、包含有实现的方法。
  • 接口可以作用于值类型和引用类型;抽象类只能作用于引用类型。例如,Struct就可以继承接口,而不能继承类。

通过相同与不同的比较,我们只能说接口和抽象类,各有所长,但无优略。在实际的编程实践中,我们要视具体情况来酌情量才,但是以下的经验和积累,或许能给大家一些启示,除了我的一些积累之外,很多都来源于经典,我相信经得起考验。所以在规则与场合中,我们学习这些经典,最重要的是学以致用,当然我将以一家之言博大家之笑,看官请继续。

3.3 规则与场合

1.      请记住,面向对象思想的一个最重要的原则就是:面向接口编程。

2.      借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。

3.      抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。

4.      接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系;

5.      接口多定义对象的行为;抽象类多定义对象的属性;

6.      接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。

7.      “接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。

8.      尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。

9.      接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。

10.  在接口中,所有的方法都默认为public。

11.  如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。

12.  从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。

13.  对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。

14.  在抽象方法声明中不能使用 static 或 virtual 修饰符。

5. 他山之石

正所谓真理是大家看出来的,所以将原子里有创新性的观点潜列于此,一是感谢大家的共享,二是完善一家之言的不足,希望能够将领域形成知识,受用于我,受用于众。

  • dunai认为:抽象类是提取具体类的公因式,而接口是为了将一些不相关的类“杂凑”成一个共同的群体。至于他们在各个语言中的句法,语言细节并不是我关心的重点。
  • 桦山涧的收藏也很不错。
  • Artech认为:所代码共用和可扩展性考虑,尽量使用Abstract Class。当然接口在其他方面的优势,我认为也不可忽视。
  • shenfx认为:当在差异较大的对象间寻求功能上的共性时,使用接口;当在共性较多的对象间寻求功能上的差异时,使用抽象基类。

最后,MSDN的建议是:

  • 如果预计要创建组件的多个版本,则创建抽象类。抽象类提供简单易行的方法来控制组件版本。通过更新基类,所有继承类都随更改自动更新。另一方面,接口一旦创建就不能更改。如果需要接口的新版本,必须创建一个全新的接口。
  • 如果创建的功能将在大范围的全异对象间使用,则使用接口。抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
  • 如果要设计小而简练的功能块,则使用接口。如果要设计大的功能单元,则使用抽象类。
  • 如果要在组件的所有实现间提供通用的已实现功能,则使用抽象类。抽象类允许部分实现类,而接口不包含任何成员的实现。

======================================================================================================

另外我们再看下  Dflying Chen  和 一醉解千愁  他们两的见解

Dflying Chen :接口用来定义两个对象通信的契约;抽象类用来封装对象间公用的行为。二者在设计起初的目标完全不同,可惜在实际应用中被太多的人误解。

一醉解千愁:接口 -- 粗略的技术规范, 抽象类 -- 对粗略的技术规范作了一些简单的说明 ,类 -- 技术规范的具体实现

实在说到最后了,我受不了啦,我就再补充一句吧,也许通过这句能够让大家来个蓦然回首

在我们大型的项目中,一般项目经理会按照功能分块,那么每个块最终必然是有联系的,他们靠什么联系呢?当然就是公开的接口了.至于接口下面是怎么实现的,大家没有必要知道太多,只要知道他们组这个接口实现了什么功能既可.这个时候,各版块之间的升级也就显得简单了,只要接口不动,内部的代码随便怎么修改都显得不那么重要了. 另外就是代码的复用程度更加高和更简单了.

BUT ,这也同时说明了接口的设计相对来说是很重要的了,现在您也明白了我为什么用掉差不多100分钟来说接口的东西了吧!(实际上加起来超过200分钟了)

======================================================================================================

看见没有,这就是大家知识共享的巨大力量了,我们上面看到这些东西不是我们任何一个人短时间能够总结出来的,但是大家一起总结,那结果就是这样爽的。

本来我想这部分我自己总结的,但是前面几节基本上把我的水分都压干了,而且想再从前面三节课中提炼我感觉很麻烦,所以本着拿来主义的宗旨,我就直接照着好的搬了。如果您对他们个中的含义不太理解的话请去看 抽象类和接口的前三级,那里我可是口水都说干了,应该算是很详细了,如果要想知道你的总结是否合理呢,就对照本章了,保管你 高高兴兴看视频,平平安安拿工资(难道拿工资会被老板扁一顿?)

我又要开始传道了:我希望大家都能够大方一点,别做得那么小气,生怕自己知道那点知识被别人知道了,饭碗就被别人抢了,事实上你在跟人分享知识的过程中并不是只一味的在付出,你同样也会有收获,无论是帮别人解答疑问还是跟别人交流。就好象我现在做这个视频一样,看起来我是在无偿的为大家做,事实上呢我同样是有收获的,因为做这个视频的时候我发现了很多我过去学和用中一直没有注意到的死角,也发现很多更新,更好的技巧,更不说我这期间从一个默默无闻的菜鸟到有这么多朋友希望通过买我的书来支持我。

所以我相信,只要我们每个人都尽量的多跟人分享你的所学,那么中国的计算机技术超越美日是绝对不会太遥远的,但是如果我们大家都一味的做出一副不得了的架势,那么不说中国的计算机技术没希望,我说你TMD自己也不会有什么成就的。(希望早点超越美日,我们的目标就可以是超越宇宙中某个比我们更高级的星球了,哈哈),我喜欢老赵的那句话,让外国人看中国人的技术文章,说到老赵,我觉得在博客园里Dflying Chen 和老赵这两匹黑马(因为他们的排名跑得太快了)所做的贡献是大家都看见的,如果对他们了解一点点的朋友也会发现他们无论技术还是生活质量那提高的速度也是很快的啊。还有李会军老师,就是搞《新版设计模式》的哪个牛X人,人家不是把本来可以出版卖钱的书做成电子书给大家下载,多好的一位同志啊。当然,还有好多好多,比如上面为我们总结这么多的anytao,因为我跟他们不认识,更恰当的说是他们不认识我,哈哈。

所以啊,我还是那句老话,为中国雄起而努力

废话完毕,开始做实例

视频和代码下载地址

【转载】 vs2005视频教程 之 抽象类和接口 四 [视频]相关推荐

  1. [导入]vs2005视频教程 之 编译程序集和发布网站 [视频]

    接下来我们说程序集: 看了上面的介绍,我们可以想下,如何应用逻辑封装到程序集中去了. 概念: 程序集的概念说简单了就是按逻辑组合起来再放入物理文件中的功能. 好处: 简化代码的部署,另外一个就是解决版 ...

  2. 转载 java抽象类与接口的区别

    Java语言中, abstract class 和interface 是支持抽象类定义的两种机制.正是由于这两种机制的存在,才赋予了Java强大的 面向对象能力.abstract class和inte ...

  3. 分别用抽象类和接口实现四个动物类(鱼类、鸟类、爬行类、昆虫类)的类别和天赋

    1.将实验五第四题中的四个动物类(鱼类.鸟类.爬行类.昆虫类)的报告类别和天赋,分别用抽象类和接口来完成 abstract class AbstractClass {public int id; // ...

  4. Java OOP 第四章 抽象类和接口

    Java OOP 抽象类和接口 文章目录 Java OOP 抽象类和接口 一.学习目标 二.抽象类 三.抽象类 (abstract) 四.抽象方法 五.抽象类和抽象方法的应用 六.final用法 七. ...

  5. 《Java技术》第三次作业--面向对象——继承、抽象类、接口

    1.阅读下面程序,分析是否能编译通过?如果不能,说明原因.应该如何修改?程序的运行结果是什么?为什么子类的构造方法在运行之前,必须调用父 类的构造方法?能不能反过来? class Grandparen ...

  6. Java公开课-02.抽象类和接口

    在讲述抽象类和接口之前,扯点别的:封装,继承,多态,我只做个简单的涉略 一,封装 1.体现: 将变量和方法放到一个类中 私有字段封装成共有属性 2.this: 如果发现成员变量的名称和方法参数的名称相 ...

  7. C#中抽象类和接口的区别与使用

    一.抽象类: 抽象类是特殊的类,只是不能被实例化:除此以外,具有类的其他特性:重要的是抽象类可以包括抽象方法,这是普通类所不能的.抽象方法只能声明于抽象类中,且不包含任何实现,派生类必须覆盖它们.另外 ...

  8. java抽象类和接口总结

    一.抽象类 二.接口 三.抽象类和接口的区别 一.抽象类 在了解抽象类之前,先来了解一下抽象方法.抽象方法是一种特殊的方法:它只有声明,而没有具体的实现.抽象方法的声明格式为: abstract vo ...

  9. java抽象类和接口详解

    接口和内部类为我们提供了一种将接口与实现分离的更加结构化的方法. 抽象类与接口是java语言中对抽象概念进行定义的两种机制,正是由于他们的存在才赋予java强大的面向对象的能力.他们两者之间对抽象概念 ...

最新文章

  1. 巨详细的prometheus+grafana实现服务器(集群)性能监控,并学着调用prometheus的api
  2. 小强的HTML5移动开发之路(18)——HTML5地理定位
  3. Java当中 文件得输入流 输出流
  4. html 手机分辨率,移动端各种分辨率手机屏幕----适配方法集锦
  5. 论文绘图神器来了:哈佛博士后开源一行代码绘制不同期刊格式图表
  6. 可可托海将打造研学旅游基地促经济发展
  7. Lightroom Classic 教程,如何在 Lightroom 中使用引导式修复透视图?
  8. Python语言的起源与发展
  9. python click模块参数处理详解
  10. JUC强大的辅助工具类
  11. 梧桐数据宣布获得千万级Pre-A轮融资
  12. ds oracle connector 连接组件,DataStage 错误集(持续更新)
  13. Qt笔记(五十七)之显示图片缩略图
  14. 非线性方程求解 :二分迭代法和牛顿迭代法
  15. Python正则表达式排除指定字符串
  16. 初二因式分解奥数竞赛题_初中数学因式分解含答案竞赛题精选
  17. 为什么short类型取值范围为-32768~32767
  18. 什么是大数据分析?定义、优点和类型
  19. 哨兵3B 地表温度产品 ENVI打开
  20. mikrotik NAT设置(winbox)

热门文章

  1. nmon Analyser服务器资源分析仪
  2. 常用的Oracle命令整理
  3. ECMAScript:客户端脚本语言的标准
  4. 06-06 Jenkins 邮件报警机制
  5. php框架中数据库模型层原理,简单模拟ThinkPHP框架模型层对数据库的链式操作-Go语言中文社区...
  6. jquery和css的区别是什么?
  7. 一个声称南方985普通学生,前端学习10个月,秋招斩获字节跳动offer的分享!
  8. Oracle count函数原理,oracle count函数
  9. java用正则表达式 编写简单词法分析器_500+ 精选 Java 面试题大放送
  10. mysql觸發器_mysql觸發器