总结一下几个帖子对于 接口和抽象类 的理解
--Richard
接口用来定义两个对象通信的契约;抽象类用来封装对象间公用的行为。
--一醉解千愁
接口 -- 粗略的技术规范
抽象类 -- 对粗略的技术规范作了一些简单的说明
类 -- 技术规范的具体实现
-- 菲琳之莎
接口是来描述一些东西可以做什么,而抽象类是来描述一些东西是什么。用专业点的话来说,应该说接口是行为的抽象,而抽象类是类的抽象
--天轰穿
抽象类:又叫抽象基类(不是鸡肋):他在定义的时候使用 abstract 关键字标记的一般类.他可包含一般类所包含的所有特性,例如,字段,属性,方法,另外他还包含一个很特殊的方法,叫抽象方法(这些方法基本上是没有执行代码的函数标题,而派生于该类的的类就必须提供执行的代码).最可气的是,他不能被实例化,他主要的用在类的定义和部分实现这方面,所以他需要在扩充类中完整的扩充并实现功能.
抽象方法: 当类中的方法在声明的时候加上 abstract 关键字的时候,他就被我们称为抽象方法(洋名字叫 abstract method , 其实偷偷告诉你哈,我最近学了好多英文单词,虽然还是常常读错,但是已经有很大进步了,估计要不了多久就可以在那里大声朗读李白曾经写过的一首英文诗歌了),但是有个很重要的提醒,只有在抽象类和接口中才可以使用抽象方法.
接口:他呢其实也是一种特殊的抽象类,用 interface 关键字标记,他的定义没有 class 关键字,他可以包含 方法和属性和事件,但是方法也只能是虚拟方法,任何派生于该接口的类就必须提供执行的代码.任何接口成员前面都不能加修饰符.
下面针对抽象类和接口做一个详细的对比
| 抽象类( abstract method ) | 接口 ( interface ) |
| 可以包含实现区块 | 不能包含实现区块 |
| 可以包含抽象方法 | 不能包含抽象方法 |
| 可以包含非public成员 | 不可以包含非public成员 |
| 能继承其他的类,包含非抽象类 | 能继承其他接口 |
| 可以控制版本 | 无法控制版本 |
| 不能被实例化 | 不能被实例化 |
抽象类和接口都是抽象一些类型,但是抽象类都是对某些事物的共同抽象,包括方法和属性等,他们标识的都是某些事物。
但是接口中只能定义规则,其实就是对被继承类型的标识,标识这些类型都能够干某件事情。
比如实现Icompare接口,表示这个类能够用作比较。
1)二者不在一个层级
抽象类可以实现接口,但接口却无法继承抽象类吧?所以严格来说,接口是抽 象类的上级。
2)作用域不同
接口体现了的是相同类别或者不同类别下事物的归纳,而抽象类则更多的体现在对相同类别事务的归纳上。这在编程中的体现就是一个类可以实现多个接口,而不能继承多个抽象类,因为一个人能有各种的功能,这些功能可能是人类特有的,也可能是和其他动物共有的,但绝对不能有一个以上的亲生父亲。
3)开放性有所不同
接口和抽象类虽然相似,但在某些场合,如分布式开发中,接口就更受欢迎,特别是面向服务中,更关注的是能干什么?而相比之下,是什么不太重要。是骡子,是马,是头驴,反正能拉车就可以。所以我认为接口相比抽象类更开放一点,更适合互操作一点。
--小庄
接口是用来抽象“服务类”的,抽象类是用来抽象“实体类”的;
行为的抽象,是规则,接口,
事物的抽象,是共性,是抽象类。

浙公网安备 33010602011771号