接口
什么是接口
应用接口之后,程序的可扩展性、可维护性会大大增强
接口的定义和实现
接口的定义类似于USB,主要作用是一共一个电源头
接口的实现类似于U盘或者USB线鼠标或者USB线键盘等等,主要作用是接口功能的体现
接口定义规范
- 使用关键字interface定义,接口类名通常使用“I”开头
- 接口中的属性、方法等,只是做一个声明,而没有任何实现
- 接口中的属性、方法等,默认都是public,不需要“画蛇添足”
接口的实践
问题:打印机对象:打印、复印、传真。市场流行的打印机:HP/SONY…
-
实现打印机接口
/// <summary> /// 多功能打印机接口 /// </summary> public interface IMultiPrinter { /// <summary> /// 打印功能 /// </summary> /// <param name="contents"></param> void Print(string contents); /// <summary> /// 复印功能 /// </summary> /// <param name="contents"></param> void Copy(string contents); /// <summary> /// 传真功能 /// </summary> /// <param name="contents"></param> void Fax(string contents); }
-
在具体对象中实现接口所提出的功能
class HPMultiPrinter : IMultiPrinter { public void Copy(string contents) { Console.WriteLine("惠普复印:"+contents); } public void Fax(string contents) { Console.WriteLine("惠普传真:" + contents); } public void Print(string contents) { Console.WriteLine("惠普打印:" + contents); } }
接口的特点
-
接口具有强制性,实现接口的类必须实现接口的所有成员
-
一个类既可以实现多个接口,也可以同时继承其他的类,前提是一般将继承的父类写在接口之前
-
类继承了多少个接口(间接继承、直接继承),对所有的接口都要进行实现
间接继承:A接口->B接口->C类
直接继承:A接口->C类,B接口->C类
接口的实践应用
-
接口提高团队成员并行开发项目的效率
- 接口的使用者只需要考虑接口的应用功能,而不用考虑接口的实现细节
- 接口的实现者只关心如何实现接口内部的细节,而不用考虑谁使用
-
接口能够提高系统的可维护性
当用户的需求改变时,只需要修改接口的实现,系统即可完成更新
接口的应用总结
-
接口的应用场合
- 如果某一个功能点需求变化比较多,应使用接口保证系统的可维护性
- 如果想实现团队成员的并行开发,可以使用接口来规范对象的使用
-
接口编写规范
- 接口成员只能是一个声明
- 实现接口的类必须全部实现接口中规定的属性、方法
-
特别说明
接口的使用不是必须的,要根据用户的需求来决定
接口实现多态
继承多态实现的条件
- 父类中必须有抽象方法或者虚拟方法
- 子类必须重写父类中的抽象方法或者虚方法
- 子类对象必须转换成父类去使用
接口多态实现的条件
- 一个接口必须被两个或两个以上类实现
- 接口实现类必须转成接口类型去使用
接口和抽象
抽象类 | 接口 | |
---|---|---|
不同点 | 用abstract定义 | 用interface定义 |
只能被继承一个 | 可以实现多个接口被继承 | |
非抽象派生类必须实现抽象方法 | 实现接口的类必须实现所有的成员 | |
需要使用override实现抽象方法 | 直接实现 | |
相似点 | 都不能直接实例化 | |
都包含未实现的方法 | ||
子类或“接口实现类”必须实现未实现的方法 |