zoukankan      html  css  js  c++  java
  • 深入了解接口的使用

          接口的通俗理解

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

      

  • 相关阅读:
    用户控件赋值
    计算一串数字中每个数字出现的次数
    如何理解c和c++的复杂类型声明
    STM32 NVIC学习
    stm32f10x_flash.c中文版
    IBM中国研究院Offer之感言——能力是一种态度
    对于STM32别名区的理解 (转载)
    STM32时钟学习之STM3210X_RCC.H解读
    STM32 DMA
    STM32 内部时钟输出PA.8(MCO)
  • 原文地址:https://www.cnblogs.com/yejiaojiao/p/5387582.html
Copyright © 2011-2022 走看看