之前对于"接口"概念很模糊,今天看了园子里两篇文章,有点开始懂了:

http://www.cnblogs.com/AndyFish/archive/2008/08/11/1265232.html     (转载)

http://www.cnblogs.com/anytao/archive/2007/04/12/must_net_02.html  (转载)

两位作者都归纳得很好:

(1)相同点(abstract class 和 interface在C#2.0中都是用来进行抽象类定义的):

都不能被直接实例化,都可以通过继承实现其抽象方法;

都是面向抽象编程的技术基础,实现了诸多的设计模式;

(2)不同点:

在abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法。而在interface中,只能够有静态的不能被修改的数据成员,接口中不允许提供任何成员的实现方式;

['这个不同点在设计类的时候应该注意']

当在差异较大的对象间寻求功能上的共性时,使用接口;当在共性较多的对象间寻求功能上的差异时,使用抽象基类

->正是这是这个原因导致了abstract class和interface所反映出的设计理念不同

->可以说: abstract class表示的是"is-a"关系,interface表示的是("can-do关系")(或者说是"like-a"关系);

这个不同点明显体现了abstract class和interface的本质差别,以下着重讲述:

看前一位作者举的例子,在写一个"报警门"的类时他运用的是:

Code class Door
     { 
     abstract void open();

abstract void close(); 
     }

Code class Car


     abstract void start();

abstract void park(); 
     }

interface Alarm
     { 
     void alarm(); 
     }

class AlarmDoor :Door,Alarm

{...}

class AlarmCar :Car,Alarm

{...}

解释:AlarmDoor本质上是Door(is door),但可实现"报警"功能(can do alarm)

AlarmCar 本质上是Car (is car), 但可实现"报警"功能(can do alarm)

接口的作用也就体现在这里:无论"门"还是"车",和"报警"功能都存在较大差异,使用"接口"就使两者很好地结合在一起,虽然说在C++中通过类的继承也可以实现 Door->AlarmDoor 和 Car->AlarmCar ,但是其设计理念没有使用"接口"来得直接明了.

转载于:https://www.cnblogs.com/ycbfish333/archive/2008/08/11/1265473.html

看了两篇园子里的文章,初步懂了点接口的涵义相关推荐

  1. 为什么linux图形引擎那么丑,为什么你的技术文章配图总是那么丑?那是你还没看过这篇教科书般的技术文章配图指南!...

    原标题:为什么你的技术文章配图总是那么丑?那是你还没看过这篇教科书般的技术文章配图指南! 这可能是一篇很多博客的读者都期待的文章,我最终还是决定说一说『如何为技术文章配图』这一话题,过去的几年一直都有 ...

  2. Harris角点两篇比较好的文章

    主要转载下面两篇博文,因为讲的比较好,放到一起便于理解 1. Harris角点点我进入原文 2. Harris角点检测原理分析 点我进入原文 ============================[ ...

  3. 学习Nginx,看完这篇超详细的文章就够了

    目录 本文简介 一.Nginx的基本概念 1.1.Nginx是什么? 1.2.Nginx能帮助我们做些什么? 1.3.Nginx的特性 二.Nginx的安装 2.1.环境介绍 2.2.安装Nginx ...

  4. 看完这篇区块链的文章,就有东西和别人扯皮了,而且扯的还很好

    网上有很多关于区块链的文章,要么过于深奥,对于初学者很难弄懂,要么过于浅显,也很难想通.这篇文章从底层讲起,由浅入深,从密码学算法讲起,不断深入,算是一遍比较完备的区块链--比特币的文章.文章以比特币 ...

  5. Linux文本三剑客之一——awk详解(1)——awk看这两篇就够啦~PS:文末有练习,来练练手吧

    shell编程三剑客 grep --> egrep --> 文本过滤 查询 awk 文本截取 sed  文本的替换和修改 目录 awk awk也可以做小数运算 awk命令简要处理流程 aw ...

  6. 看完这篇java单利模式文章,面试的时候再也不怕了

    来源:https://blog.csdn.net/weixin_44170221/article/details/106365623 哇塞,被称为Java中最简单的设计模式--单例设计模式.这都可以有 ...

  7. 两篇介绍IIS的文章

    http://blog.csdn.net/heaven_pl/archive/2008/02/19/2106572.aspx http://blog.csdn.net/heaven_pl/archiv ...

  8. 看了这篇平台经济的文章,你对垄断会有全新的认识!

    平台经济的发展,对反垄断法的理念和规则提出新要求.如何发挥竞争机制作用.维护公平竞争市场秩序,需要探索新的标准和做法. 首先,平台经济的规模与效益关系和工业经济截然不同.平台具有网络效应和边际成本递减 ...

  9. 2万字,看完这篇才敢说自己真的懂线程池!

    前言 线程池可以说是 Java 进阶必备的知识点了,也是面试中必备的考点,可能不少人看了一些文章后能对线程池工作原理说上一二,但这还远远不够,如果碰到比较有经验的面试官再继续追问,很可能会被吊打,考虑 ...

最新文章

  1. 由init、loadView、viewDidLoad、viewDidUnload、dealloc的关系说起
  2. 企业 MySQL 优化实施方案
  3. socket 网络 编程
  4. Using Python with Oracle
  5. pdf文档遇到了共享冲突_如何将链接共享为PDF格式的Google文档链接
  6. 借助实时数据推送快速制作在线对战五子棋小游戏丨实战
  7. SQLServer日期格式化
  8. codeforces 110A-C语言解题报告
  9. codeforces B. Pasha and String(贪心)
  10. 只有ajax会跨域吗_为什么跨域Ajax是安全问题?
  11. python处理txt文件的一种情况
  12. Solrflux源码分析-Sql Support within Solr-类Sql的solr搜索实现(2)
  13. 计算机网络通信过程问题解析
  14. 批量打印插件 php,CAD批量打印插件下载
  15. 将数组分成两部分,使得 |sum1 - sum2| 最小. LeetCode - 1049
  16. 将日/分钟数据转为周线、月线或其他周期
  17. OC内存管理常见面试题整理
  18. 安装MySQL——压缩包安装
  19. 每天可以一看的哲理句子
  20. CentOS 搭建 Vsftpd 服务,一次性成功,收藏了!

热门文章

  1. mybatis中config.xml文件的解析
  2. kohana分析之主程序加载流程
  3. vmware下/mnt/hgfs下为空的问题
  4. oracle实现自增字段
  5. 题目1165:字符串匹配
  6. 安装Docker:解决container-selinux = 2.9问题
  7. hbuilder/hbuilderx 无法检测到模拟器
  8. Windows Store App JavaScript 开发:小球运动示例
  9. [转]Entity Framework走马观花之把握全局
  10. CF 6 A. Triangle