先來看類的概念:編程
什麼是類?類能夠這麼理解.類就是功能的集合.類也能夠看作是實現一種功能的集合或者方法;
什麼是接口?接口能夠理解爲,對類的規定,對類的約束,甚至對整個項目的約束。函數
區分概念 spa
接口和抽象類的概念不同。接口是對動做的抽象,抽象類是對根源的抽象。設計
抽象類表示的是,這個對象是什麼。接口表示的是,這個對象能作什麼。好比,男人,女人,這兩個類(若是是類的話……),他們的抽象類是人,說明他們都是人。對象
人能夠吃東西,狗也能夠吃東西,你能夠把「吃東西」定義成一個接口,而後讓這些類去實現它。繼承
因此,在高級語言上,一個類只能繼承一個類(抽象類)(正如人不可能同時是生物和非生物),可是能夠實現多個接口(吃飯接口、走路接口)。索引
拓展:
接口
接口的使用比較多的狀況是在多人協做開發的項目中.由於每人都會分配不一樣的任務。事件
例如,在一個銀行系統中,總行下面會有分行,分行下面又會有支行..面對這樣的結構,項目確定是須要多人合做進行的。多人合做則會產生一個問題,如:A負責浙江分行,B負責海南分行,C負責河南分行。由於每一個地區的銀行都會根據當地不一樣的狀況會有不一樣的需求,可是他們又有一些類似或者同樣的需求,若是ABC每一個人都直接針對各自的分行進行代碼的編寫,則確定會有大量重複的代碼出現.並且最要命的問題是,每一個人對方法,對變量的命名和編程的風格都會不一樣,若是項目這個時候忽然改變了需求,所以讓A負責B的工做,B負責C的工做,C負責A的工做,能夠想象ABC三我的的工做開展是怎麼樣的困難。
開發
這個時候若是使用了接口,相似這樣的問題就能夠在最大程度上緩解。對於類似或者同樣的功能,項目經理定義了接口,有了接口,就有了對這些功能制定規則和約束,而類繼承了接口後,所以ABC三人就有了一個共同的接口,也能夠說是有了一個共同的目標---相同的的方法,屬性,事件,他們有了外在的約定,惟一要作好的就是對接口的實現工做,而沒必要再考慮我要怎麼作這個類呢?我能不能這麼作呢,由於最上層的接口告訴他們,按照我說的作就行了,接口在這個時候就是準則。
這個時候或許有人就會說,既然接口這麼好,那爲何不給每一個類都制定一個接口?接口在大部分時候扮演的是一個對行業規則,而不是對類的規則,若是多個類都是處於同一行業的那就不必爲每一個類定義一個接口。
當你關注一個事物的本質的時候,用抽象類;當你關注一個操做的時候,用接口。
抽象類的功能要遠超過接口,可是,定義抽象類的代價高。由於高級語言來講(從實際設計上來講也是)每一個類只能繼承一個類。在這個類中,你必須繼承或編寫出其全部子類的有共性。雖然接口在功能上會弱化許多,可是它只是針對一個動做的描述。並且你能夠在一個類中同時實現多個接口。在設計階段會下降難度的。
一、接口相似於類,但接口的成員都沒有執行方式,它只是方法、屬性、事件和索引的組合而已,而且也只能包含這四種成員;類除了這四種成員以外還能夠有別的成員(如字段)。
二、不能實例化一個接口,接口只包括成員的簽名;而類能夠實例化(abstract類除外)。
三、接口沒有構造函數,類有構造函數。
四、接口不能進行運算符的重載,類能夠進行運算符重載。
五、接口的成員沒有任何修飾符,其成員老是公共的,而類的成員則能夠有修飾符(如:虛擬或者靜態)。
六、派生於接口的類必須實現接口中全部成員的執行方式,而從類派生則否則。
拓展:
一、接口是抽象類的變體,接口中全部的方法都是抽象的。而抽象類是聲明方法的存在而不去實現它的類;
二、接口能夠多繼承,抽象類不行(類能夠多繼承,但抽象類不能夠多繼承,要注意區分!);
三、接口定義方法,不能實現,而抽象類能夠實現部分方法;
四、接口中基本數據類型爲static 而抽類象不是的。