大多數人認為,接口的意義在于頂替多重繼續。眾所周知Java沒有c++那樣多重繼續的機制,但是卻能夠實作多個接口。其實這樣做是很牽強的,接口和繼續是完全不同的東西,接口沒有能力代替多重繼續,也沒有這個義務。接口的作用,一言以蔽之,就是標志類的類別(type of class)。把不同類型的類歸于不同的接口,可以更好的治理他們。OO的精髓,我以為,是對對象的抽象,最能體現這一點的就是接口。為什么我們討論設計模式都只針對具備了抽象能力的語言(比如c++、java、c#等),就是因為設計模式所研究的,實際上就是如何合理的去抽象。(cowboy的名言是“抽象就是抽去像的部分”,看似調侃,實乃至理)。
繼續的概念不用多說,很好理解。為什么要繼續呢?因為你想重用代碼?這絕對不是理由,繼續的意義也在于抽象,而不是代碼重用。假如對象A有一個run()方法,對象B也想有這個方法,所以有人就Class B extends A。這是不經大腦的做法。假如在B中實例化一個A,調用A的Run()方法,是不是可以達到同樣的目的?如下: