深入了解接口的使用

      接口的通俗理解

          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====索引