zoukankan      html  css  js  c++  java
  • 接口(interface)

     这节讲一下接口(interface) 。

     接口是一种特殊的抽象类,它用来定义一组行为规范,不同于抽象类的是,接口只能定义方法,并且只能定义抽象方法。类用继承来描述子类和父类之间的关系,而接口用实现来描述接口和类的关系。

    interface IAnimal
    {
        void Shout ();
    }

     接口有个约定俗成的命名规则,所有接口的首字母都是I接口中的方法都必须是public,所以定义接口中的方法时可以省略此关键字。

        

     接口本身的语法很简单,但是接口在整个面向对象中的作用是举足轻重的,一般接口作为服务的调用者,其子类作为服务的提供者,可以让我们实现更松的耦合。跟接口有关的有一个很重要的原则:接口隔离原则(Interface Segregation Principle),它跟类的单一职责原则类似,它强调接口定义的方法,要从属于同一类。

     我们看一个不太恰当例子:

    interface IDonaldDuck
    {
        void Say ();
        void Swim ();
    }
    
    class DonalDuck : IDonaldDuck
    {
        public void Say ()
        {
            Console.WriteLine ("没有小鸭子比我更懂说话。");
        }
    
        public void Swim ()
        {
            Console.WriteLine ("没有小鸭子比我更懂游泳。");
        }
    }

     唐老鸭继承了IDonalDuck接口,接口定义了说话和浮水这两个方法,说话是人的特有的行为,浮水是鸭科动物等的行为,这两种行为的从属不一样,所以根据接口隔离原则来说,我们不能将其放在一块,而是应该像下面这样:

    interface IPreson
    {
        void Say ();
    }
    interface IDuck
    {
        void Swim ();
    }
    
    class DonalDuck : IPreson,IDuck
    {
        public void Say ()
        {
            Console.WriteLine ("没有小鸭子比我更懂说话。");
        }
    
        public void Swim ()
        {
            Console.WriteLine ("没有小鸭子比我更懂游泳。");
        }
    }

     根据行为的从属性质不同,划分合理的接口,但是要注意,我们在开发的时候,不要将接口分的过细,要取一个度,合适的遵循接口隔离原则。

     另外,我们还可以显示的实现接口,还是以上面的例子来说:

    class DonalDuck : IPreson, IDuck
    {
        void IPreson.Say ()
        {
            throw new NotImplementedException ();
        }
    
        void IDuck.Swim ()
        {
            throw new NotImplementedException ();
        }
    }

     在方法的名字前加上接口名,这样,在实例化类的时候,我们只有在将类的实例赋给它的实现接口时,才能使用该类实现的该接口的方法。

     直接实例,是无法看到实现的接口方法的。

    我们需要显示的赋给接口类才能看到对应的方法:

     个人公众号,热爱分享,知识无价。

  • 相关阅读:
    python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本
    mitm6:通过IPv6攻破IPv4网络
    php写一个判断是否有cookie的脚本
    python写一个DDos脚本(DOS)
    分布式系统设计系列 -- 基本原理及高可用策略(转)
    在Ubuntu 16.04 上编译安装OpenCV3.2.0(Cmake + python3 + OpenCV3)(转)
    好玩的Raft动画演示,原理秒懂
    全球分布式数据库:Google Spanner(论文翻译)
    分布式系统设计系列 -- 基本原理及高可用策略 (转)
    MySQL更新优化(转)
  • 原文地址:https://www.cnblogs.com/charlesmvp/p/13812747.html
Copyright © 2011-2022 走看看