接口与抽象类的区别

1 相同点

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

2 不同点

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

3 规则与场合

  • 请记住,面向对象思想的一个最重要的原则就是:面向接口编程。
  • 借助接口和抽象类,23个设计模式中的很多思想被巧妙的实现了,我认为其精髓简单说来就是:面向抽象编程。
  • 抽象类应主要用于关系密切的对象,而接口最适合为不相关的类提供通用功能。
  • 接口着重于CAN-DO关系类型,而抽象类则偏重于IS-A式的关系;
  • 接口多定义对象的行为;抽象类多定义对象的属性;
  • 接口定义可以使用public、protected、internal 和private修饰符,但是几乎所有的接口都定义为public,原因就不必多说了。
  • “接口不变”,是应该考虑的重要因素。所以,在由接口增加扩展时,应该增加新的接口,而不能更改现有接口。
  • 尽量将接口设计成功能单一的功能块,以.NET Framework为例,IDisposable、IComparable、IEquatable、IEnumerable等都只包含一个公共方法。
  • 接口名称前面的大写字母“I”是一个约定,正如字段名以下划线开头一样,请坚持这些原则。
  • 在接口中,所有的方法都默认为public。
  • 如果预计会出现版本问题,可以创建“抽象类”。例如,创建了狗(Dog)、鸡(Chicken)和鸭(Duck),那么应该考虑抽象出动物(Animal)来应对以后可能出现风马牛的事情。而向接口中添加新成员则会强制要求修改所有派生类,并重新编译,所以版本式的问题最好以抽象类来实现。
  • 从抽象类派生的非抽象类必须包括继承的所有抽象方法和抽象访问器的实实现。
  • 对抽象类不能使用new关键字,也不能被密封,原因是抽象类不能被实例化。
  • 在抽象方法声明中不能使用 static 或 virtual 修饰符
  • 转自:http://www.cnblogs.com/vshg/archive/2010/03/02/1676516.html

转载于:https://www.cnblogs.com/johnwonder/archive/2010/03/04/1678314.html

接口和抽象类的区别(转载)相关推荐

  1. 【转载】接口和抽象类的区别 --相信你看完不会再混淆了

    原文地址:http://www.cnblogs.com/huihui-gohay/archive/2009/12/13/1623070.html 我想,对于各位使用面向对象编程语言的程序员来说,&qu ...

  2. python接口和抽象类的区别_接口和抽象类有什么区别?

    最近团队在招人:阿里新零售事业群CBU技术部招Java高级&专家,团队主要负责B2B工业品牌业务,坐标杭州滨江,有兴趣的小伙伴私戳我. **************************** ...

  3. java 关注公众号没有调接口_高频面试题:接口和抽象类的区别

    作为一个基础的Java高频面试题,是所有Java面试者必须烂熟于心的.当然不能死记硬背,可以通过实际地写几个小demo,边实际操作边理解,既能感受到编程的快乐,更重要的是真的理解记住了二者的区别. 此 ...

  4. Java接口学习(接口的使用、简单工厂、代理模式、接口和抽象类的区别)

    前言引入 官方解释:Java接口是一系列方法的声明,是一些方法特征的集合,一个接口只有方法的特征没有方法的实现,因此这些方法可以在不同的地方被不同的类实现,而这些实现可以具有不同的行为(功能). 我的 ...

  5. 接口与抽象类的区别和联系

    接口 1.因为java不支持多重继承,所以有了接口,一个类只能继承一个父类,但是可以实现多个接口,同时接口本身也可以继承多个接口. 2.接口里面的成员变量默认是public static final类 ...

  6. 接口和抽象类的区别?

    接口和抽象类的区别? 我先来说说它们俩在语法上的区别吧,然后再来谈谈我的个人理解. 抽象类可以有具体的方法和属性,  接口只能有抽象方法和常量. 抽象类使用abstract修饰,接口使用interfa ...

  7. 接口与抽象类的区别,为什么要用接口,抽象类不香吗?

    接口是一种比较特殊的抽象类(个人理解) 接口与抽象类的区别: 最直观来说: 接口: 接口中变量是常量,所以接口中不能有构造方法.因为构造方法最大的作用是给对象赋值或改值(个人理解)和创建对象.因为变量 ...

  8. java接口和抽象类的区别(经典面试题)

    java接口和抽象类的区别(经典面试题) 要了解接口和抽象类的区别,首先需要明白接口和抽象类的定义. 1.抽象类 包含抽象方法的类称为抽象类,但并不意味着抽象类中只能有抽象方法,它和普通类一样,同样可 ...

  9. 接口,类与接口的关系,接口与抽象类的区别

    接口 1 接口的概念 与之前学习过的抽象类一样,接口( Interface )在Java中也是一种抽象类型,接口中的内容是抽象形成的需要实现的功能,接口更像是一种规则和一套标准. 2 接口格式 3 接 ...

  10. 精通Java 面试 07题 接口和抽象类的区别 (持续更新中)

    文章目录 一.接口和抽象类的区别(方式一) 二.接口和抽象类的区别(方式二) 总结 这里我写了两种回答方式,可以各取所需. 一.接口和抽象类的区别(方式一) 抽象类可以存在普通成员函数,而接口只能存在 ...

最新文章

  1. 做正确的事情和把事情做正确
  2. 硬盘运行微型linux,linux用smartctl看硬盘运行了多少小时
  3. Selenium2Library关键字(1)
  4. VS2008 快捷键大全[转帖]
  5. 当程序开发人员开始抛弃技术时,是否意味着噩梦的开始?抛弃了SQL Server 2000才发现客户的简单问题真的很难解决...
  6. 重磅!Nature盘点年度十佳论文,生命科学占据半壁江山,中国学者表现亮眼
  7. maven检测依赖_检测Maven依赖中介
  8. 如何检查数组是否包含JavaScript中的对象?
  9. 假如王撕葱是程序员。。。
  10. 清华大学出品:罚梯度范数提高深度学习模型泛化性
  11. 配置windows 2008 R2远程桌面授权,激活授权许可服务器
  12. 【LaTex】LaTex的下载与安装(超详细、超简洁)
  13. vrep和matlab联合仿真
  14. 查看浏览器Browsers的内核版本, 可以用 navigator.userAgent
  15. MNE溯源fieldtrip官网教程
  16. WSL下源码阅读工具LXR(Linux Cross-Referencer)的配置
  17. CM311-1A 卡刷 + 线刷、刷安卓与 Armbian 教程
  18. 十一、Latex的数学矩阵排版
  19. Java程序突然死掉的原因
  20. linux下测试网速

热门文章

  1. MySQLdb查询有中文关键字查不到数据
  2. Spring学习篇:AOP知识整理
  3. justify-content
  4. codeforces 665E Beautiful Subarrays
  5. 在win7命令行使用ssh通过秘钥登录linux
  6. 生活随笔:师弟,加油
  7. 论文:GeoGebra 在线数学应用函数演示
  8. 文件解压缩,删除文件,创建文件,读取xml文件为json字符串,得到相对路径下的图片名称...
  9. Vue项目中的文件/文件夹命名规范
  10. Form 表单提交参数