接口 抽象類

今天看文章說到工做中對於接口和抽象類使用是否按照必定標準,仔細想了想,接觸的幾個項目,都沒有按照必定標準使用.框架

網上搜索了一番,關於使用標準各有各的說法,不過大多數人從類能夠繼承和接口不能夠繼承,只能夠實現方面考慮,即類的繼認可爲是"is-a",接口認爲是"like-a"這麼兩種形式.對象

有的認爲接口是一種相似框架的存在,即實現接口的對象能夠沒有任何關聯,徹底是不一樣的類別.繼承

好比說貓,狗能夠認爲是動物,都有叫這樣的行爲,叫的內容不一樣,一個喵喵,一個汪汪,那麼能夠把叫抽象出來,具體的叫聲有子類實現;這樣定義爲抽象類;再者以飛爲例,鳥和飛機均可以飛,可是屬於不一樣類別,則定義爲接口.可是我的認爲若是把叫的範圍擴大一些,不單單侷限於動物,那麼是否是就能夠定義爲接口了;若是把飛範圍縮小些,好比大雁、麻雀,那麼是否是能夠定義爲抽象類了。如此說來,定義是接口仍是抽象類,徹底由對象的範圍來決定,即由項目中的對象來決定.接口

固然接口須要遵循ISP原則,全稱「ISP接口隔離原則」,如下從描述摘自http://baike.baidu.com/item/isp/4807182#viewPageContentit

1.使用多個專門的接口比使用單一的總接口要好基礎

2. 一個類對另一個類的依賴性應當是創建在最小的接口上的搜索

3. 一個接口表明一個角色,不該當將不一樣的角色都交給一個接口。沒有關係的接口合併在一塊兒,造成一個臃腫的大接口,這是對角色和接口的污染。方法

簡單來講就是接口要合乎大小,不要胖,不要瘦.項目

實現方法主要如下兩種:view

一、使用委託分離接口.
二、使用多重繼承分離接口.

這個明天再詳細研究.

總而言之,接口和抽象類的使用規則創建在對象基礎上,「is-a」、「like-a」是比較容易理解區別的,須要具體問題具體分析.

相關文章
相關標籤/搜索