1.接口语法:
[public] interface IFlyable
{
//接口中的成员不能添加访问修饰符。默认修饰符public
//接口中不允许成员有方法体。
//接口中不能包含字段。
//接口中能写自动属性,但不能写普通属性
//自动属性,既没有字段也没有方法体。普通属性既有字段也有方法体。
//自动属性
//接口中不能包含构造函数,因为构造函数一定包含方法体。
string Name
{set;
get;}
//接口中只能有方法(方法,属性,索引器)
void Fly();
}
2.接口的特点
接口是一种规范,只要一个类继承了一个接口,这个类就必须实现这个接口中所有的成员。
为了实现多态;接口不能被实例化;也就是说,接口不能创建对象。
//接口不能实例化,静态类不能实例化,抽象类也不能实例化
接口中的成员不能加访问修饰符,接口中的成员的访问修饰符默认为public,不能修改。
接口中只能有方法,属性,索引器,事件,不能有字段和构造函数。(因为接口中不能有实现体,故不能包含构造函数)
接口与接口之间可以继承,并且可以多继承。
接口并不能去继承一个类,而类可以继承接口,(接口只能继承于接口,而类既能继承接口,又能继承类)
实现(继承)接口的子类必须实现该接口的全部成员。
一个类可以同时继承一个类并实现多个接口,如果一个子类同时继承了父类A,并且实现了接口IA,那么在语法上A必须写在IA的前面。
如:class MyClass:A ,IA{};因为是单继承
显示实现接口的目的,解决方法的重名问题
什么时候显示的去实现接口。
当继承的接口中的方法和参数一模一样的时候,要显示的实现接口
当一个抽象类实现接口的时候,需要子类去实现接口。
显示实现接口:
作用:为了解决方法的重名问题。
public interface M2
{
void Exam();
}
public class Mas : M2
{
public void Exam()
{
}
//类mas中有同名方法,故使用显示实现接口
void M2.Exam()
{
throw new NotImplementedException();
}
}
//什么时候用虚方法来实现多态
//什么时候用抽象类来实现多态
//什么时候用接口来实现多态
//真的鸭子会游泳,木鸭子不会游泳,橡皮鸭子会游泳
/*
真鸭子,橡皮鸭子、木鸭子不能抽象成一个类,故不能用抽象类实现。
* 又真鸭子和橡皮鸭子会,而木鸭子不会,动作不一致,故不能用虚方法实现
* 其中三者都表示是否会、、。且不同类别,故使用接口实现
*/