接口与抽象类 (interface and abstract class)


虽然在刚接触C#的时候就接触了这两个概念, 这也是经典面试题之一.
今天坤坤在每日一题里出了个关于接口的问题, 我还是不会.
那就再次学习下接口, 顺便学习下抽象类, 加深理解.

接口:
1. 接口是引用类型
2. 不能被实例化
3. 只能包含实现的方法声明, 不能包含实现其成员的任何代码, 实现过程必须在实现接口的类中实现.
4. 一个类可以支持多个接口, 多个类也可以支持相同的接口.
5. 派生类必须实现接口的所有成员.
6. 接口中的所有成员默认为public, 接口中不能有private修饰符.
7. 接口中可以包含: 方法, 属性, 索引器, 事件
8. 接口中不能包含: 常量, 字段(域), 构造函数, 析构函数, 静态成员.

抽象类:
1. 抽象方法只作声明, 而不包含实现.
2. 抽象类不能被实例化. 除此以外, 具有类的其他特征.
3. 抽象类可以包含非抽象的属性和方法, 但是抽象方法必须放在抽象类中.
4. 派生类必须覆盖基类的抽象方法
5. 抽象类可以派生自另一个抽象类.(这个不太明白)

抽象类和接口的相同点:
1. 都可以被继承
2. 都不能被实例化
3. 都可以包含方法声明
4. 派生类必须实现未实现的方法.

抽象类和接口的区别:
1. 抽象类是一个不完整的类, 需要进一步细化, 而接口只是一个行为的规范或规定
2. 抽象基类可以定义字段,属性,和方法实现. 接口只能定义属性, 索引器, 事件和方法声明, 不能包含字段.
3. 接口可以被多重实现, 抽象类只能被单一继承.
4. 抽象类更多的是定义在一系列紧密相关的类之间, 而接口大多数是定义在关系疏松,但都实现某一功能的类中.

原文地址:https://www.cnblogs.com/niuniu1985/p/1563633.html