飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
接口是引用类型的,类似于类,和抽象类的相似之处有:不能实例化;包含未实现的方法声明;派生类必须实现未实现的方法。
接口只是一个行为的规范或规定,接口的名称习惯上以字母 I 开头,微软的自定义接口总是后带able字段,证明其是表述一类“我能做……”。接口基本上不具备继承的任何具体特点,它仅仅承诺了能够调用的方法。
接口除了可以包含方法之外,还可以包含属性、索引器、事件,而且这些成员都被定义为公有的。除此之外,不能包含任何其他的成员,例如:常量、域、构造函数、析构函数、静态成员。一个类可以直接继承多个接口,但只能直接继承一个类(包括抽象类)。
接口中只能包含成员的声明,不能有任何实现代码。接口的成员总是公有的,不需要也不能添加public 等修饰符,也不能声明为虚方法或静态方法。
interface IFlyable{
//接口的成员总是公有的,不需要也不能添加public 等修饰符
void Fly();
}
class Bird:IFlyable{
//子类中重写的方法其存取权限不能低于父类的
public void Fly(){
//只要有{},不是分号,一行代码没有也是实现
}
}
class Airplane:IFlyable{
public void Fly(){
}
}
好的接口定义应该是具有专一功能性的,而不是多功能的,否则造成接口污染。如果一个类只是实现了这个接口的中一个功能,而不得不去实现接口中的其他方法,就叫接口污染。