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