zoukankan      html  css  js  c++  java
  • 接口与类

    1、为什么要引入接口?

        先来看类的概念:

        什么是类?类可以这么理解.类就是功能的集合.类也可以看做是实现一种功能的集合或者方法;
        什么是接口?接口可以理解为,对类的规定,对类的约束,甚至对整个项目的约束。

     

        区分概念   

        接口和抽象类的概念不一样。接口是对动作的抽象,抽象类是对根源的抽象。

        抽象类表示的是,这个对象是什么。接口表示的是,这个对象能做什么。比如,男人,女人,这两个类(如果是类的话……),他们的抽象类是人,说明他们都是人。

        人可以吃东西,狗也可以吃东西,你可以把“吃东西”定义成一个接口,然后让这些类去实现它。

        所以,在高级语言上,一个类只能继承一个类(抽象类)(正如人不可能同时是生物和非生物),但是可以实现多个接口(吃饭接口、走路接口)。

        拓展:

        接口的使用比较多的情况是在多人协作开发的项目中.因为每人都会分配不同的任务。

        例如,在一个银行系统中,总行下面会有分行,分行下面又会有支行..面对这样的结构,项目肯定是需要多人合作进行的。多人合作则会产生一个问题,如:A负责浙江分行,B负责海南分行,C负责河南分行。因为每个地区的银行都会根据当地不同的情况会有不同的需求,但是他们又有一些相似或者一样的需求,如果ABC每个人都直接针对各自的分行进行代码的编写,则肯定会有大量重复的代码出现.而且最要命的问题是,每个人对方法,对变量的命名和编程的风格都会不同,如果项目这个时候突然改变了需求,因此让A负责B的工作,B负责C的工作,C负责A的工作,可以想象ABC三个人的工作开展是怎么样的困难。

        这个时候如果使用了接口,类似这样的问题就可以在最大程度上缓解。对于相似或者一样的功能,项目经理定义了接口,有了接口,就有了对这些功能制定规则和约束,而类继承了接口后,因此ABC三人就有了一个共同的接口,也可以说是有了一个共同的目标---相同的的方法,属性,事件,他们有了外在的约定,唯一要做好的就是对接口的实现工作,而不必再考虑我要怎么做这个类呢?我能不能这么做呢,因为最上层的接口告诉他们,按照我说的做就好了,接口在这个时候就是准则。

    2、什么时候使用接口?

        这个时候或许有人就会说,既然接口这么好,那为什么不给每个类都制定一个接口?接口在大部分时候扮演的是一个对行业规则,而不是对类的规则,如果多个类都是处于同一行业的那就没必要为每个类定义一个接口。

        当你关注一个事物的本质的时候,用抽象类;当你关注一个操作的时候,用接口。

        抽象类的功能要远超过接口,但是,定义抽象类的代价高。因为高级语言来说(从实际设计上来说也是)每个类只能继承一个类。在这个类中,你必须继承或编写出其所有子类的有共性。虽然接口在功能上会弱化许多,但是它只是针对一个动作的描述。而且你可以在一个类中同时实现多个接口。在设计阶段会降低难度的。

    3、接口与类区别

        1、接口类似于类,但接口的成员都没有执行方式,它只是方法、属性、事件和索引的组合而已,并且也只能包含这四种成员;类除了这四种成员之外还可以有别的成员(如字段)。
        2、不能实例化一个接口,接口只包括成员的签名;而类可以实例化(abstract类除外)。
        3、接口没有构造函数,类有构造函数。
        4、接口不能进行运算符的重载,类可以进行运算符重载。
        5、接口的成员没有任何修饰符,其成员总是公共的,而类的成员则可以有修饰符(如:虚拟或者静态)。
        6、派生于接口的类必须实现接口中所有成员的执行方式,而从类派生则不然。

    拓展:

     

    1、接口是抽象类的变体,接口中所有的方法都是抽象的。而抽象类是声明方法的存在而不去实现它的类;

    2、接口可以多继承,抽象类不行(类可以多继承,但抽象类不可以多继承,要注意区分!);

    3、接口定义方法,不能实现,而抽象类可以实现部分方法;

    4、接口中基本数据类型为static 而抽类象不是的。

     

  • 相关阅读:
    KindEditor
    JS缺失错误- Uncaught SyntaxError: Unexpected token <
    JS
    SQL
    Bootstrap
    CSS-筛选 获取第一个td
    订单号创建并发问题
    保存对象时碰到的问题-列名 'Discriminator' 无效
    ViewBag对象的更改
    Kafka协议兼容性改进
  • 原文地址:https://www.cnblogs.com/yedushusheng/p/5524021.html
Copyright © 2011-2022 走看看