1.什么事接口

  

    01.接口就是为了约束方法的格式(参数和返回值类型)而存在的

    02.接口可以实现多继承,弥补单继承的缺陷。

  03.接口可以看成是一个特殊的抽象类,通过反编译看源码可知

    04.接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体

    05.如果一个类实现了某个接口,就得实现该接口中所有的方法

    06.接口要谨慎使用,防止出现接口污染!

    07.接口仅仅代表一种能力,实现该接口的类和接口没有继承关系

    08.接口是用来实现的,类是用来继承的。

    09.其实很多时候,看似可以不用接口,因为接口就是一个方法的约定,

    表明你这个类必须要有某些方法,但是不写接口也可以有这些方法,用了接口,

    就可以使用接口变量,统一调用,实现多态。

    10.接口中只能定义方法,不能定义变量。

    

 

2.抽象类和接口的区别:

 

当需要的各个对象之间存在父子类关系时,可以考虑使用抽象类,

当各个对象之间不存在继承关系,只是有相同的能力时,而已考虑使用接口。

实现类 在实现接口的方法是 不需要override关键字

接口里定义方法直接从放回值开始  比如

 void Eat();

接口底层编译器默认加publlic abstract

 

3,创建一个接口的例子

  //创建一个飞的接口

public interface IFly
   {
       //接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
       void Say();

   }

 //创建一个吃的接口

//吃的接口
   public interface IEat
   {
       //接口中方法不用访问修饰符,因为CLR会自动添加,并且不能有方法体
       void eat();
   }

  //创建一个鸟类来实现飞的接口和吃的接口

  

public class Bird:IFly,IEat{

 public void Say()
        {
            Console.WriteLine("鸟在飞");
        }

        public void eat()
        {
            Console.WriteLine("鸟在吃");
        }
    }

  //创建一个plan飞机类 实现接口飞

public class Plan{

   public void Say(){

    Console.WriteLine("飞机在飞");

  }
}

  

 

 //Test 去测试 

//定义接口数组实例化对象
IFly[] ifly ={new Gird(),new Plan()};
//循环数组调用方法实现多态
            foreach (IFly iFly in iFlies)
            {
                iFly.Say();
            }

  

 4.接口名实现 方法

注:如果有一个类要实现两个接口,不巧的是这两个接口(如:IFly,IPlay)中右两个同命名的方法(Eat)

我们都知道

如果一个类实现了某个接口,就得实现该接口中所有的方法

这怎么办呐?自有解决的方法的:

 我们就可以使用接口名.方法来实现

 

//实现了IFly和IPlay两个接口
   public class Dog:IFly,IPlay
    {
        //如果一个类实现了某个接口,就得实现该接口中所有的方法
       //这样我们就可以使用接口名.方法来实现
        void IFly.Say()
        {
            
        }

        void IEat.Eat()
        {
            
        }
    }