标签:
接口就是为了约束方法的格式(参数和返回值类型)而存在的
接口可以实现多继承,弥补单继承的缺陷。
接口可以看成是一个特殊的抽象类,通过反编译看源码可知
接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
如果一个类实现了某个接口,就得实现该接口中所有的方法
接口要谨慎使用,防止出现接口污染!
接口仅仅代表一种能力,实现该接口的类和接口没有继承关系。
接口是用来实现的,类是用来继承的。
其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,
表明你这个类必须要有某些方法,但是不写接口也可以有这些方法,用了接口,
就可以使用接口变量,统一调用,实现多态。
抽象类和接口的区别
当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,
当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口
接口的通俗理解
飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是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(); }
标签:
原文地址:http://www.cnblogs.com/john69-/p/5383791.html