接口就是为了约束方法的格式(参数和返回值类型)而存在的 数据结构
接口能够实现多继承,弥补单继承的缺陷。函数
接口能够当作是一个特殊的抽象类,经过反编译看源码可知spa
接口中方法不用访问修饰符,由于CLR会自动添加,而且不能有方法体code
若是一个类实现了某个接口,就得实现该接口中全部的方法对象
接口要谨慎使用,防止出现接口污染!blog
接口仅仅表明一种能力,实现该接口的类和接口没有继承关系。继承
接口是用来实现的,类是用来继承的。索引
其实不少时候,看似能够不用接口,由于接口就是一个方法的约定,接口
代表你这个类必需要有某些方法,可是不写接口也能够有这些方法,用了接口,事件
就可使用接口变量,统一调用,实现多态。
抽象类和接口的区别
当须要的各个对象之间存在父子类关系时,能够考虑使用抽象类,
当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口
接口的通俗理解
飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;可是F22属于飞机抽象类,鸽子属于鸟抽象类。
就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),但我能够给你个具体的铁门或木门(多态);并且只能是门,你不能说它是窗(单继承)。
一个门能够有锁(接口)也能够有门铃(多实现)。
门(抽象类)定义了你是什么,接口(锁)规定了你能作什么
(一个接口最好只能作一件事,你不能要求锁也能发出声音吧(注意避免接口污染))
接口总结(摘录):
接口是组件之间的协议,描述了组件对外提供的服务。从技术上讲接口是一组包含了函数型方法的数据结构。 经过这组数据结构,客户代码能够调用组件对象的功能。接口能够从父接口中继承。接口的继承首先是说明性继承,不是实现性继承,它的实现须要经过类或结构来实现;其次接口继承能够是多继承。
属性的本质是方法,索引器的本质是属性。
接口包含的成员有方法、属性、索引指示器和事件。因为接口容许多继承,在可能发生二义性的地方能够采用全权名来避免。能够用类来实现接口。在类中定位接口成员的实现称之为接口映射。类必须为接口的全部成员提供具体的实现,包括接口中显式定义的成员, 以及接口从父接口中继承而来的成员。一样,在对接口的实现过程当中能够采用显式接口成员执行体来避免产生二义性。派生类能够对基类已经实现的接口进行重实现。
抽象类也能够实现接口,但接口成员必须映射到抽象类的抽象成员。抽象类的派生类若是是非抽象类,则必须经过方法重载来实现接口成员。
接口实例
//某些动物或者物体具备飞这一行为,定义IFly 飞行接口 public interface IFly { //01.接口只是用来规范实现该接口的类中方法的格式,至关因而一个规范的制定者 //02.接口中的方法不能有方法体,并且接口中的方法不用访问修饰符 //03.在没有继承关系的多个类中,实现多态,接口是一种处理方案 //04.接口中只能定义方法,不能定义变量。string Fly(); }
1 //鸟类 实现了IFly这一接口 2 public class Birds:IFly 3 { 10 public string Fly() 11 { 12 return "I Can Fly"; 13 } 14 }
//飞机一样也能飞 public class Plane:IFly { public string Fly() { return "飞机飞"; } }
//在咱们的方法中进行使用 static void Main(string[] args) { //经过接口如何实现多态?? IFly[] flys = { new Birds(), new Plane() }; foreach (IFly fly in flys) { Console.WriteLine(fly.Say("接口实例")); } Console.ReadKey(); }