接口與抽象類的選擇

   如果要創建不帶任何方法定義和成員變量的基類,選擇接口而不是抽象類。


  ===========================================================

      什麼時候使用接口?什麼時候使用抽象?選擇Java接口還是抽象類 (轉)

     interface關鍵字用來聲明一個接口,它可以產生一個完全抽象的類,並且不提供任何具體實現。interface的特性整理如下: 

               1. 接口中的方法可以有參數列表和返回類型,但不能有任何方法體。

               2. 接口中可以包含字段,但是會被隱式的聲明爲static和final。          

                3. 接口中的字段只是被存儲在該接口的靜態存儲區域內,而不屬於該接口。 

               4. 接口中的方法可以被聲明爲public或不聲明,但結果都會按照public類型處理。 

               5. 當實現一個接口時,需要將被定義的方法聲明爲public類型的,否則爲默認訪問類型,Java編譯器不允許這種情況。 

               6. 如果沒有實現接口中所有方法,那麼創建的仍然是一個接口。

               7. 擴展一個接口來生成新的接口應使用關鍵字extends,實現一個接口使用implements。

     interface在某些地方和abstract有相似的地方,但是採用哪種方式來聲明類主要參照以下兩點:  

               1. 如果要創建不帶任何方法定義和成員變量的基類,那麼就應該選擇接口而不是抽象類。

               2. 如果知道某個類應該是基類,那麼第一個選擇的應該是讓它成爲一個接口,只有在必須要有方法定義和成員變量的時候,才應該選擇抽象類。

         因爲抽象類中允許存在一個或多個被具體實現的方法,只要方法沒有被全部實現該類就仍是抽象類。  以上就是接口的基本特性和應用的領域,但是接口絕不僅僅如此,在Java語法結構中,接口可以被嵌套,既可以被某個類嵌套,也可以被接口嵌套。這在實際開發中可能應用的不多,但也是它的特性之一。需要注意的是,在實現某個接口時,並不需要實現嵌套在其內部的任何接口,而且,private接口不能在定義它的類之外被實現。  

      最後寫點自己的認識:    
      這個問題面試的時候也會很多人問起,
有過設計方面的工作內容的人和沒有過類似設計的人的回答還是有所不同的,再結合一些其他類似的問題,面試官假如有心的話還是能看出來一個人之前的工作內容的狀態。     最後再加上thinking in java中對接口使用原因最根本的指出:爲了能夠向上轉型爲多個基類型以及由此而帶來的靈活性。  當然使用接口還有個原因是和抽象類相同的:防止客戶端程序員創建該類的對象,並確保這僅僅是個建立一個接口。   
所以:接口和抽象類,怎麼選?當我們確定某個事物應該成爲一個基類的話,接口是第一選擇


  java的接口與抽象類的使用很多人有過這樣的疑問?

爲什麼有的地方必須使用接口而不是抽象類,而在另一些地方,又必須使用抽象類而不是接口呢?或者說,在考慮Java類的一般化問題時,很多人會在接口和抽象類之間猶豫不決,甚至隨便選擇一種。     實際上接口和抽象類的選擇不是隨心所欲的。 要理解接口和抽象類的選擇原則,有兩個概念很重要: 對象的行爲和對象的實現。如果一個實體可以有多種實現方式,則在設計實體行爲的描述方式時,應當 達到這樣一個目標:在使用實體的時候,無需詳細瞭解實體行爲的實現方式。也就是說,要把對象的行爲和對象的實現分離開來。既然Java的接口和抽象類都可以定義不提供具體實現的方法,在分離對象的行爲和對象的實現時,到底應該使用接口還是使用抽象類呢?   通過抽象類建立行爲模型     在接口和抽象類的選擇上,必須遵守這樣一個原則:行爲模型應該總是通過接口而不是抽象類 定義。爲了說明其原因,下面試着通過抽象類建立行爲模型,看看會出現什麼問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章