接口=规范 interface
约定好遵守某种规范就可以写通用的代码
如笔记本的内存条等...
里面象类一样但不是类
里面有1系列的方法,
任意类实现时必须实现接口里的所有的方法
那么这个类肯定有这些方法,可以直接拿来用
接口就是规范
------接口实现的意义是多态
多态的意义是可扩展性灵活性
比如鸟类,都会跑,一般鸟会飞,但是有的鸟不会飞
所以写2个类,鸟类,里面有跑的方法,和飞类,里面有飞的方法
但是麻雀不能同时继承鸟类和飞类
所以把飞类定义为接口,命名规范:IFlyable,I开头able结尾
//1.接口命名以大写I开头,由于接口中都是方法(而方法主要是实现某个功能,能力),所以接口的命名一般都是XXXable具有某些能力
//2.接口中可以包含方法、属性、索引器、事件(通过反编译查看以后,得知:其实都是方法(最终都编译成了方法。))Item
//3.接口中的成员,默认访问修饰符就是public
//4.接口中的成员不能有任何实现,就像抽象访法一样。
//5.实现接口的子类,必须将接口中的所有成员都实现。
//6实现接口的子类,直接将接口中的成员实现即可,无需override关键字。
//7.当一个类同时继承了其他类,并且实现了接口的时候,必须保证将类放在前面,接口放在后面。
例子:
//鸟
class Bird
{
public void Run()
{
Console.WriteLine("鸟在奔跑!");
}
}
//接口
public interface IFlyable
{
//接口和抽象类一样,也是只能有方法的声明,不能有任何的实现
void Fly();
}
//麻雀
class Sparrow : Bird, IFlyable
{
#region IFlyable 成员
public void Fly()
{
Console.WriteLine("小麻雀飞在树林中。");
}
#endregion
}
//鹦鹉
class Parrot : Bird, IFlyable
{
#region IFlyable 成员
public void Fly()
{
Console.WriteLine("鹦鹉在小笼子里飞...");
}
#endregion
}
//企鹅
class Penguin : Bird
{
}
实现:
IFlyable fly = new Parrot();
fly.Fly();
打印结果:
鹦鹉在小笼子里飞...
建议:
面向抽象编程,使用抽象(父类、抽象类、接口)不使用具体。
“向上转型”
在编程时:
接口→抽象类→父类→具体类(在定义方法参数、返回值、声明变量的时候能用抽象就不要用具体。)
能使用接口就不用抽象类,能使用抽象类就不用类,能用父类就不用子类。
避免定义“体积庞大的接口”、“多功能接口”,会造成“接口污染”。只把相关联的一组成员定义到一个接口中(尽量在接口中少定义成员)。单一职责原则
定义多个职责单一的接口(小接口)(组合使用)。(印刷术与活字印刷术)
随着学习的深入再继续体会接口的作用。