C#中接口(interface)和抽象类(abstract class)的区别
对面型对象理解总觉得不够深入,这里记录一下:
接口(interface)
- 接口是无状态的
- 接口一般只有成员方法,一般无成员变量,属性,虽然也可以有,但基本上不这样做
- 接口中不能包含实现代码,子类中必须对接口方法进行实现
- 接口可以被多个类继承实现
抽象类(abstract class)
- 抽象类是可以有状态的
- 抽象类除了可以有抽象方法外,还可以有成员变量、属性,也可以有非抽象方法
- 抽象类中可以有自己的非抽象接口实现,子类可以复用
- 抽象类不能被多继承,一个类只能继承一个父类
- 抽象类中的抽象方法在子类中也可以是抽象的,直到最后有个子类的实现即可