你確實已經(jīng)在用接口了,最典型的比如Swing里面的監(jiān)聽。回頭想想,是不是?
接口,interface,從中文的翻譯上來說,接口的意思就是兩個系統(tǒng)之間的聯(lián)系。
所以如果想要理解接口,你必須先搞清楚兩個系統(tǒng)之間會有什么樣的聯(lián)系呢?怎么聯(lián)系呢?
我們舉例說明:(下面的文字需要你打開你的編程工具,跟我一起實現(xiàn)所有代碼。)
比如一個大牌導演,現(xiàn)在要組織一臺晚會,這個大牌導演最擅長的就是大場面、大制作,演員無所為,他把誰放進去,誰準大紅大紫。但是也不是沒有任何標準,抓一個人就用,導演列出了他要使用的演員的標準:能說好臺詞;好,就這個標準,普天之下,誰符合標準誰就可以拿來用了。
導演和演員是有關系的,導演需要支配演員。
我們看具體的演員和一個具體的導演。
演員類:
導演類:
大家已經(jīng)看到了,導演中的perform方法會用到演員Player;
我們測試一下:
結果:
沒錯,就是這個結果。
現(xiàn)在呢有個機器人,很厲害,也可以說臺詞。
那么這個機器人能否提供給導演來用呢?
也就是能否這樣用呢?
別聽我說,你最好現(xiàn)在就實驗一下??吹搅税?,不行。為什么呢?因為perform方法要的是Player,很明顯,Robot和Player沒有任何關系。我要的是饅頭,你給我了一把剪刀,這個不行。
你想到了,讓perform方法能使用Robot不就行了么,對我們可以重載。
修改一下Director類,重載perform方法
怎么樣,現(xiàn)在你也可以perform(robot)了吧
呵呵,新的問題又來了,現(xiàn)在我在想,為什么下面這個鸚鵡不能去參加演出呢?
是的,你現(xiàn)在依然還不能這樣調(diào)用:
對,繼續(xù)重載perform方法吧
可是能拿來做演員的實在太多了,猴子、猩猩,據(jù)說最近韓國有頭大象都在練習說話了,怎么辦?難道我要一直重載無數(shù)個perform方法么?
其實,導演perform要的就是一個會說話的這么個玩意,你拿來的玩意只要符合這個標準,就沒問題了。那么我們不妨換個思路,導演只確認演員的標準,也就是只要求演員能說話就好了。
好的,導演對演員要求的標準是:
這是個接口,導演根本不看你到底如何表演,只是要求了說你必須會say(String),你只要會這個就可以了。不過我給接口起這個Actress 名字確實不太合適,湊合用吧,也代表了現(xiàn)在導演的潮流了。
大家注意了,這個接口里面明確的say方法是抽象的,不需要任何具體操作,因為這是導演樹立標準的時候所不需要考慮的。
導演類也改變?yōu)椋?/strong>
你注意到了么,perform的參數(shù)變成了Actress。也就是現(xiàn)在不用再無休止的重載了,現(xiàn)在我們的導演perform方法只要一個,就是符合Actress這個標準就可以了。啥都行,只要符合這個標準。怎么才能符合這個標準呢?沒錯,就是implements,只要你的類,無論他出身何處(從什么繼承),只要他implements了我們的接口,他就是一個光榮的Actress了(你可能會想那些男演員怎么辦?那頭大象怎么辦?)。
好的,我們可以讓我們之前的Player implements Actress,Robot implements Actress,Parrot implements Actress,甚至你現(xiàn)在的隨便一個類implements Actress,然后你就可以
只要這個Xxxx類實現(xiàn)了Actress標準就可以了。(你可以把任何一個類implements Actress,然后拿來替換Xxxx)
導演可以再也不用管到底天下有多少的可以當演員的類了,也不用天天為了頻繁跳出來的新的演員類而不斷重載方法了。他只看一件事情,就是你說來參加我導演的大戲,你必須符合我定的標準。當然導演可能隨時更改這個標準。他更改標準的時候也從來不去關心那些符合標準的人的情況,我給改了標準,你們?nèi)绻€要繼續(xù)implements,那沒辦法,你們必須也要重新添加新的方法(我新定的標準),然后才能繼續(xù)為我所用。
導演只看到了標準。
演員只需要符合標準。
導演可以不看演員的具體出身。
導演可以不管不問演員的其他需要。
導演只使用符合既定標準的那些方法。
誰想當演員,誰就要實現(xiàn)導演定義演員的標準。
拿起鍵盤,馬上實驗一下吧。
我只為了你能理解接口在編程中的作用。我們后面繼續(xù)看看ActionListener到底是個什么,Java的監(jiān)聽如何實現(xiàn)呢?