接口的通俗理解
01.飞机会飞,鸟会飞,他们都继承了同一个接口“飞”;但是F22属于飞机抽象类,
鸽子属于鸟抽象类。
02.就像铁门木门都是门(抽象类),你想要个门我给不了(不能实例化),
但我可以给你个具体的铁门或木门(多态);而且只能是门,你不能说它是窗(单继承);
一个门可以有锁(接口)也可以有门铃(多实现)。
门(抽象类)定义了你是什么,接口(锁)规定了你能做什么
(一个接口最好只能做一件事,你不能要求锁也能发出声音吧(接口污染))
一、首先我们要了解我们为什么要实现接口?
1)第一:因为子类只有一个直接父类,即子类只能继承一个父类 为了能让子类实现多个方法模型,所有微软引入了接口的用法 一个类可以实现多接口
2)第二:提高了程序的扩展性和降低系统间的耦合性
3)第三:可以规定方法的形式 和方法规范
二、定义接口为了更好地与其他的类区分我们一般将=========》“I.....”作为开头
三、接口的关键字是:interface
定义接口的方法如下:(注意里面的注意点)
namespace 接口简单实现多态 { //定义接口的方法 把Class关键字换成 interface 关键字 public interface IFly //通过反编译看见它自身带有抽象方法 { //接口中定义方法的注意点 //01 方法不能有方法体(也就是不能实现) //02 C#中方法不能有修饰符修饰 (微软系统内部会自动增加一个public 修饰符) //03 C#接口中只能定义方法而不能定义字段 (Java可以定义字段,但是必须是静态常量字段) void Say(); //通过反编译看见它自身带有抽象方法和虚方法所有才有02条的说明 } }
如何实现接口?
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(); } } }
接口简单实现多态
namespace 接口简单实现多态 { //定义一个飞机类 实现 IFly接口 public class Prin:IFly { public void Say() { Console.WriteLine("我是飞机"); } } }
补充点
1在一个类中实现Ifly这个接口和Ieat接口,代码如下
//用逗号连接另一个接口 public class Prin:IFly,Ieat { }
抽象类和接口的区别:
当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,
当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口
面向对象======方法
面向过程======函数
类到接口======叫做实现
接口到接口=====叫继承
get/set{}=====属性
<>====是发型
()====方法
this====索引