首先我们要知道什么是接口?
接口是组件之间的协议,描述了组件对外提供的服务。从技术上讲接口是一组包含了函数型方法的数据结构。
通俗理解:就是飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,鸽子属于鸟抽象类。
接口就是为了约束方法的格式(参数和返回值类型)而存在
(一个接口最好只能做一件事)
为什么要使用接口?
因为子类只有一个直接父类,即子类只能继承一个父类 为了能让子类实现多个方法模型,所有微软引入了接口的用法 一个类可以实现多接口
接口可以实现多继承,弥补单继承的缺陷。
什么情况下要使用接口?
在没有继承关系的多个类中,实现多台,可以使用接口
namespace 接口简单实现多态 { //定义一个普通类 鸟类 实现 IFly接口 public class Bird:IFly { //注意 !! //必须实现该接口的所有方法 public void Say() { Console.WriteLine("我是鸟,我会飞!"); } } }
namespace 接口简单实现多态 { //定义一个飞机类 实现 IFly接口 public class Prin:IFly { public void Say() { Console.WriteLine("我是飞机"); } } }
namespace 接口简单实现多态 { class Program { static void Main(string[] args) { //定义一个接口类型的数组 用来保存 实现该接口的 类 可以理解为里氏替换原则 父类变量指向子类对象只不过这里换成了接口 IFly[] ifly = { new Bird(), new Prin() }; //遍历数组 foreach (IFly items in ifly) { //输出接口中的方法 会自动调用该子类的方法 items.Say(); } Console.ReadKey(); } } }
使用接口实现多继承
namespace 深入了解接口 { //定义一个IEat接口 public interface IEat { void Eat(); } }
namespace 深入了解接口 { //接口继承接口 public interface IFly:IEat { void fly(); } }
namespace 深入了解接口 { //鸟可以实现多个接口 public class Bird:IFly { public void fly() { Console.WriteLine("我能飞!"); } public void Eat() { Console.WriteLine("我能吃"); } } }
namespace 深入了解接口 { class Program { static void Main(string[] args) { IFly fly = new Bird(); fly.Eat(); fly.fly(); Console.ReadKey(); } } }
{ //定义一个飞机类 实现 IFly接口 public class Prin:IFly { public void Say() { Console.WriteLine("我是飞机"); } } }