大多數(shù)人認(rèn)為,接口的意義在于頂替多重繼續(xù)。眾所周知Java沒(méi)有c++那樣多重繼續(xù)的機(jī)制,但是卻能夠?qū)嵶鞫鄠€(gè)接口。其實(shí)這樣做是很牽強(qiáng)的,接口和繼續(xù)是完全不同的東西,接口沒(méi)有能力代替多重繼續(xù),也沒(méi)有這個(gè)義務(wù)。接口的作用,一言以蔽之,就是標(biāo)志類的類別(type of class)。把不同類型的類歸于不同的接口,可以更好的治理他們。OO的精髓,我以為,是對(duì)對(duì)象的抽象,最能體現(xiàn)這一點(diǎn)的就是接口。為什么我們討論設(shè)計(jì)模式都只針對(duì)具備了抽象能力的語(yǔ)言(比如c++、java、c#等),就是因?yàn)樵O(shè)計(jì)模式所研究的,實(shí)際上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似調(diào)侃,實(shí)乃至理)。
繼續(xù)的概念不用多說(shuō),很好理解。為什么要繼續(xù)呢?因?yàn)槟阆胫赜么a?這絕對(duì)不是理由,繼續(xù)的意義也在于抽象,而不是代碼重用。假如對(duì)象A有一個(gè)run()方法,對(duì)象B也想有這個(gè)方法,所以有人就Class B extends A。這是不經(jīng)大腦的做法。假如在B中實(shí)例化一個(gè)A,調(diào)用A的Run()方法,是不是可以達(dá)到同樣的目的?如下: