接口与类

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 而抽类象不是的。

 

posted @ 2016-05-24 16:55  程序员姜戈  阅读(217)  评论(0编辑  收藏  举报