接口可以看作是一种特殊的“抽象类”,但是采用与抽象类完全不同的语法来表示,两者的设计理念也是不同的,抽象类利于代码的复用,接口利于代码的扩展和维护
定义语法
【修饰符】 interface 接口名 extends 父接口1,父接口2,......{
//常量定义
// 方法定义
}
类实现接口
class 类名 extends 父类名 implements 接口1,接口2,......{
//类成员
}
说明:
- 接口的命名规则与类相同。如果修饰符是public,则该接口在整个项目中可见。如果省略,则只在当前包可见。
- 接口中可以定义常量,不能定义变量,接口中的属性都会自动用public static final 修饰符,即接口中的属性都是全局静态常量。接口中的常量必须定义时就指定初始值。
- public static final int pI= 3.14;
- int pI = 3.14; //在接口中1和2 的效果完全相同。
- int pI; //错误 !在接口中必须定义初始值,类中会有默认值。
- 接口中所有的方法都是抽象方法。都会自动用public abstract 修饰,即接口中只有全局抽象方法。
- 和抽象类一样接口无法实例化且不能有构造方法。
- 接口之间可通过extends实现继承,接口可继承多个接口,但接口不能继承类。
- 接口实现类必须实现接口的全部方法,否则必须定义为抽象类。
一个类只能有一个直接父类,但可通过implements实现多个接口。
类在继承父类时又实现多个接口时,extends必须位于implements之前。
接口表示一种约定,一种能力,体现了约定和实现相分离的原则。
在C#中使用接口
语法:
【修饰符】 interface 接口名:父接口1,父接口2,....{
属性定义
方法定义
}
class 类名:父类名,接口1,接口2,...{}
说明:
- 接口之间可通过”:“来实现继承关系,一个接口可继承多个接口,但接口不能接触类,类只有一个父类,但又多个接口,使用冒号”:“来继承类并实现接口。
- 接口定义零或多个成员,成员主要是方法、属性和索引器。接口中不能包含常量、变量和构造方法,也不能包含任何静态成员。
- 接口中访问权限是public,定义时显式指定任何修饰符都是非法的。
- 惯例,C#中接口的名称以大写”I“开头。