
java零基礎(chǔ)入門-面向?qū)ο笃?/b>(十三)? 接口(上)
接口很個很重要的知識點,不管是我們使用別人的工具,還是我們自己項目,都會大量的接觸到接口。
但是各種教材一上來就是各種規(guī)則定義,具體有什么用,不明不白不清不楚,本文帶你了解接口到底是個啥玩意。
在說接口之前,很有必要了解一下標(biāo)準(zhǔn)化和規(guī)范化的概念。
那么,我們從辣條開始吧~
辣條國家標(biāo)準(zhǔn)
前些時看了個新聞,講的是辣條準(zhǔn)備出國家標(biāo)準(zhǔn),這可是嚇得我趕緊多吃了幾根辣條壓壓驚。
這么多的小吃零食,為啥單單就這個辣條要出國家標(biāo)準(zhǔn)?
原來,這是因為某些企業(yè)的辣條在當(dāng)?shù)厥峭耆系胤綐?biāo)準(zhǔn)的,而在別的地方銷售,卻被定義為不符合國家標(biāo)準(zhǔn),遭到下架。
在進一步了解新聞,發(fā)現(xiàn),原來在企業(yè)當(dāng)?shù)兀睏l執(zhí)行的是糕點類的地方標(biāo)準(zhǔn),而在外地,抽檢單位對辣條執(zhí)行的是調(diào)味面制品的國家標(biāo)準(zhǔn)。

我們食品藥監(jiān)部門為了大家的健康可是操碎了心,為了大家的身體健康著想,在標(biāo)準(zhǔn)中規(guī)定了糖,鹽,油的用量,如果太多的糖鹽油可是會導(dǎo)致各種疾病的,針對不同的食品類型,專門制定了不同的檢驗標(biāo)準(zhǔn)。
矛盾的源頭
為了讓你們好好學(xué)java,我專門去研究了辣條有關(guān)標(biāo)準(zhǔn)中不同的地方,找到了關(guān)鍵因素,那就是 ---? 食品添加劑

由于制作好的辣條從生產(chǎn)到被消費者吃掉,中間的時間可能很長,那么就需要添加適量的防腐劑,不然食物變質(zhì)了,問題就很嚴(yán)重了。這樣一來,加也不對,有害健康,不加又不對,事物會變質(zhì)。所以需要國家標(biāo)準(zhǔn),規(guī)定計量,既不有害健康,也能保證食品不變質(zhì)。
標(biāo)準(zhǔn)的定義:“標(biāo)準(zhǔn)是對重復(fù)性事物和概念所做的統(tǒng)一規(guī)定。它以科學(xué)、技術(shù)和實踐經(jīng)驗的綜合成果為基礎(chǔ),經(jīng)有關(guān)方面協(xié)商一致,由主管機構(gòu)批準(zhǔn),以特定形式發(fā)布,作為共同遵守的準(zhǔn)則和依據(jù)。”
當(dāng)一個行業(yè)發(fā)展到了一定的規(guī)模,就會出現(xiàn)一些不守規(guī)矩的企業(yè)對這個行業(yè)造成破壞,比如辣條行業(yè),就被媒體多次曝光黑作坊制作的不合格辣條,對這些害群之馬,就需要用標(biāo)準(zhǔn)去約束和規(guī)范他們,保證行業(yè)的良性發(fā)展。
從辣條的標(biāo)準(zhǔn)制定,我們可以發(fā)現(xiàn)標(biāo)準(zhǔn)這個東西是非常重要的,如果沒有標(biāo)準(zhǔn),結(jié)果一定是混亂的。
標(biāo)準(zhǔn)在代碼中的作用
我們對辣條和標(biāo)準(zhǔn)進行一下抽象,國家制定了標(biāo)準(zhǔn),各個廠家根據(jù)這個標(biāo)準(zhǔn)來生成辣條,雖然口味上各有不同,但是他們都是符合辣條標(biāo)準(zhǔn)的產(chǎn)品。

也就是說,標(biāo)準(zhǔn)只是一個抽象的概念,而各個廠家實際生產(chǎn)出來的辣條是具體的實現(xiàn)。
說到抽象概念,有沒有想到我們前面說的抽象類,抽象類是專門作為父類給子類繼承的,但是這里又有問題了。辣條的標(biāo)準(zhǔn)是有多個的,比如在A地你需要執(zhí)行的是糕點的標(biāo)準(zhǔn),在B地你需要執(zhí)行的是調(diào)味面制品的標(biāo)準(zhǔn)。

如果按照抽象類的思維來做,會有幾個問題
1.辣條和標(biāo)準(zhǔn)可不是繼承關(guān)系,辣條怎么繼承標(biāo)準(zhǔn)?標(biāo)準(zhǔn)不是從辣條抽象出來的,沒有辦法成為辣條的父類,所以這里是不能用抽象類來定義標(biāo)準(zhǔn)的。
2.假設(shè)我們的辣條是子類,糕點和調(diào)味面制品是父類,還有一個更大的問題,我要遵守兩個標(biāo)準(zhǔn),就需要用辣條同時去繼承糕點和調(diào)味面制品,然后再去滿足標(biāo)準(zhǔn),但是我們java里面是不允許多繼續(xù)啊,我們前面說過,java是單繼承,只能有一個直接父類。

不按規(guī)矩辦事不但辣條做不好,代碼也寫不出來了。
那么我們在代碼里要怎么解決這個問題?
比抽象類更抽象
問題出現(xiàn)了,我要實現(xiàn)標(biāo)準(zhǔn),而且是實現(xiàn)多個標(biāo)準(zhǔn),并且還不能用繼承抽象類,怎么辦?
天空一聲巨響 接口 閃亮登場~
首先來看看大家給接口的封號~
比抽象類更抽象的就是接口
比抽象類還要抽象,我們可以從幾個方面去理解他。
從概念層面看,抽象類是對一些有相同特性的類進行的抽象,比如辣條,面筋抽象一下成為調(diào)味面制品,但是接口是對抽象概念組成部分的定義。比如上面調(diào)味面制品的標(biāo)準(zhǔn)中,定義了水分,脂肪,氯化物,他們都是調(diào)味面制品的組成部分。
正是因為接口只對抽象事物的組成進行了定義,所以它看上去,要比抽象更加抽象。

從代碼層面看,抽象類里面可以實現(xiàn)方法,為子類提供公共方法,而接口里面全部都是抽象方法,不允許實現(xiàn)方法。接口連一個實際的方法都沒有,是不是比抽象類更加的抽象?
現(xiàn)在我們看看怎么解決上面那個問題。
辣條A,B,C必須要遵守兩個規(guī)范,我們直接定義兩個接口,一個是糕點類的標(biāo)準(zhǔn),一個是調(diào)味面制品的標(biāo)準(zhǔn),然后在實際生成辣條A,B,C的時候去實現(xiàn)這些接口就行了。
因為java是允許實現(xiàn)多個接口的,而接口里面又都是抽象方法,一旦實現(xiàn)接口,必須實現(xiàn)接口內(nèi)所有的抽象方法,這樣,就算沒有國家標(biāo)準(zhǔn),你同時滿足了糕點標(biāo)準(zhǔn)和面制品標(biāo)準(zhǔn),也可以放心的銷售了。

接口就是定義了一個標(biāo)準(zhǔn)和規(guī)范,當(dāng)你要使用別人的工具代碼時,就必須按照別人的要求來。如果你編寫了工具代碼給別人用,你也可以定義標(biāo)準(zhǔn)讓使用者來遵守。
何時使用抽象類 何時使用接口
既然抽象類和接口里面都有抽象方法,那么何時用抽象類?何時用接口?
抽象類的使用場景:如果一批類可以抽象成一個概念,那么使用抽象類,比如在一個OA項目里,各種單據(jù)的審批,可以將單據(jù)抽象出來做成抽象類,然后有各種具體的單據(jù)來繼承單據(jù)的抽象類。
使用接口的場景:單據(jù)必須有創(chuàng)建編號,申請和審批這幾個方法,那么可以將單據(jù)抽象成接口,如果有新的單據(jù)種類,必須先實現(xiàn)單據(jù)接口,這樣每個單據(jù)都必須有了這三個方法。
本章專門從概念方面對接口進行了解讀,下一篇我們用代碼來說話,看看接口還有有哪些特性。
PS:本來可以早點發(fā),但是覺得沒寫好,刪了重寫,耽誤了點時間,抱歉。