java零基础入门-面向对象篇(十三) 接口(上)
接口很个很重要的知识点,不管是我们使用别人的工具,还是我们自己项目,都会大量的接触到接口。
但是各种教材一上来就是各种规则定义,具体有什么用,不明不白不清不楚,本文带你了解接口到底是个啥玩意。
在说接口之前,很有必要了解一下标准化和规范化的概念。
那么,我们从辣条开始吧~
辣条国家标准
前些时看了个新闻,讲的是辣条准备出国家标准,这可是吓得我赶紧多吃了几根辣条压压惊。
这么多的小吃零食,为啥单单就这个辣条要出国家标准?
原来,这是因为某些企业的辣条在当地是完全符合地方标准的,而在别的地方销售,却被定义为不符合国家标准,遭到下架。
在进一步了解新闻,发现,原来在企业当地,辣条执行的是糕点类的地方标准,而在外地,抽检单位对辣条执行的是调味面制品的国家标准。
调味面制品国家标准我们食品药监部门为了大家的健康可是操碎了心,为了大家的身体健康着想,在标准中规定了糖,盐,油的用量,如果太多的糖盐油可是会导致各种疾病的,针对不同的食品类型,专门制定了不同的检验标准。
矛盾的源头
为了让你们好好学java,我专门去研究了辣条有关标准中不同的地方,找到了关键因素,那就是 --- 食品添加剂
山梨酸钾-防腐剂由于制作好的辣条从生产到被消费者吃掉,中间的时间可能很长,那么就需要添加适量的防腐剂,不然食物变质了,问题就很严重了。这样一来,加也不对,有害健康,不加又不对,事物会变质。所以需要国家标准,规定计量,既不有害健康,也能保证食品不变质。
标准的定义:“标准是对重复性事物和概念所做的统一规定。它以科学、技术和实践经验的综合成果为基础,经有关方面协商一致,由主管机构批准,以特定形式发布,作为共同遵守的准则和依据。”
当一个行业发展到了一定的规模,就会出现一些不守规矩的企业对这个行业造成破坏,比如辣条行业,就被媒体多次曝光黑作坊制作的不合格辣条,对这些害群之马,就需要用标准去约束和规范他们,保证行业的良性发展。
从辣条的标准制定,我们可以发现标准这个东西是非常重要的,如果没有标准,结果一定是混乱的。
标准在代码中的作用
我们对辣条和标准进行一下抽象,国家制定了标准,各个厂家根据这个标准来生成辣条,虽然口味上各有不同,但是他们都是符合辣条标准的产品。
辣条标准也就是说,标准只是一个抽象的概念,而各个厂家实际生产出来的辣条是具体的实现。
说到抽象概念,有没有想到我们前面说的抽象类,抽象类是专门作为父类给子类继承的,但是这里又有问题了。辣条的标准是有多个的,比如在A地你需要执行的是糕点的标准,在B地你需要执行的是调味面制品的标准。
多个标准如果按照抽象类的思维来做,会有几个问题
1.辣条和标准可不是继承关系,辣条怎么继承标准?标准不是从辣条抽象出来的,没有办法成为辣条的父类,所以这里是不能用抽象类来定义标准的。
2.假设我们的辣条是子类,糕点和调味面制品是父类,还有一个更大的问题,我要遵守两个标准,就需要用辣条同时去继承糕点和调味面制品,然后再去满足标准,但是我们java里面是不允许多继续啊,我们前面说过,java是单继承,只能有一个直接父类。
抽象与集成不按规矩办事不但辣条做不好,代码也写不出来了。
那么我们在代码里要怎么解决这个问题?
比抽象类更抽象
问题出现了,我要实现标准,而且是实现多个标准,并且还不能用继承抽象类,怎么办?
天空一声巨响 接口 闪亮登场~
首先来看看大家给接口的封号~
比抽象类更抽象的就是接口
比抽象类还要抽象,我们可以从几个方面去理解他。
从概念层面看,抽象类是对一些有相同特性的类进行的抽象,比如辣条,面筋抽象一下成为调味面制品,但是接口是对抽象概念组成部分的定义。比如上面调味面制品的标准中,定义了水分,脂肪,氯化物,他们都是调味面制品的组成部分。
正是因为接口只对抽象事物的组成进行了定义,所以它看上去,要比抽象更加抽象。
再次抽象从代码层面看,抽象类里面可以实现方法,为子类提供公共方法,而接口里面全部都是抽象方法,不允许实现方法。接口连一个实际的方法都没有,是不是比抽象类更加的抽象?
现在我们看看怎么解决上面那个问题。
辣条A,B,C必须要遵守两个规范,我们直接定义两个接口,一个是糕点类的标准,一个是调味面制品的标准,然后在实际生成辣条A,B,C的时候去实现这些接口就行了。
因为java是允许实现多个接口的,而接口里面又都是抽象方法,一旦实现接口,必须实现接口内所有的抽象方法,这样,就算没有国家标准,你同时满足了糕点标准和面制品标准,也可以放心的销售了。
接口就是定义了一个标准和规范,当你要使用别人的工具代码时,就必须按照别人的要求来。如果你编写了工具代码给别人用,你也可以定义标准让使用者来遵守。
何时使用抽象类 何时使用接口
既然抽象类和接口里面都有抽象方法,那么何时用抽象类?何时用接口?
抽象类的使用场景:如果一批类可以抽象成一个概念,那么使用抽象类,比如在一个OA项目里,各种单据的审批,可以将单据抽象出来做成抽象类,然后有各种具体的单据来继承单据的抽象类。
使用接口的场景:单据必须有创建编号,申请和审批这几个方法,那么可以将单据抽象成接口,如果有新的单据种类,必须先实现单据接口,这样每个单据都必须有了这三个方法。
本章专门从概念方面对接口进行了解读,下一篇我们用代码来说话,看看接口还有有哪些特性。
PS:本来可以早点发,但是觉得没写好,删了重写,耽误了点时间,抱歉。
网友评论