接口和內部類爲咱們提供了一種將接口與實現分離的更加結構化的方法。程序員
1.抽象類和抽象方法
- 抽象類,是普通的類與接口之間的一種中庸之道.
- 抽象方法:僅有聲明而沒有方法體.
- 抽象類:包含抽象方法的類.若是一個類包含一個或多個抽象方法,該類必須被限定爲抽象的.
- 若是從一個抽象類繼承,並想建立該新類的對象,那麼久必須爲基類中的全部抽象方法提供方法定義。若是不這樣作,那麼導出類便也是抽象的,且編譯器將會強制用abstract關鍵字來限定這個類.
- 建立沒有任何抽象方法的抽象類:阻止產生這個類的任何對象.
2.接口
- interface關鍵字產生一個徹底抽象的類,它沒有提供任何具體實現.它容許建立者肯定方法名、參數列表和返回類型,可是沒有任何方法體(接口之提供;額形式,二尾提供任何具體實現).
- 一個接口表示:全部實現了該特定接口的類看起來都像這樣(接口被用來創建類與類之間的協議).
- 接口能夠包含域,可是這些域隱式地是static和final的.
- 要讓一個類遵循某個特定接口(或者是一組接口),須要使用implements關鍵字.
- 在接口中,方法默認是public的.當要實現一個接口時,接口中被定義的方法必須被定義爲是public的.
3.徹底解耦
- 建立一個可以根據所傳遞的參數對象的不一樣而具備不一樣行爲的方法,被稱爲策略設計模式.
- 適配器設計模式:適配器中的代碼將接受你所擁有的接口,併產生你所須要的接口.
- 將接口從具體的實現中解耦使得接口能夠應用於多種不一樣的具體實現,所以代碼也就更具可複用性.
4.Java中的多重繼承
- 使用接口的核心緣由:爲了可以向上轉型爲多個基類型(以及由此帶來的靈活性).
- 第二個緣由:防止客戶端程序員建立該類的對象,並確保這僅僅是創建一個接口.
- 若是要建立不帶任何方法定義和成員變量的基類,那麼就應該選擇接口而不是抽象類.事實上,若是知道某事物應該成爲一個基類,那麼第一選擇應該是使它成爲一個接口.
5.經過繼承來擴展接口
- 經過繼承,能夠很容易地在接口中添加新的方法聲明,還能夠經過繼承在新接口中組合數個接口,這兩種狀況均可以得到新的接口.
- 通常狀況下,只能夠將extends用於單一類,可是能夠引用多個基類接口,只需用逗號將接口名一一隔開便可.
- 在打算組合的不一樣接口中使用相同的方法名一般會形成代碼可讀性的混亂,請儘可能避免這種狀況.
6.適配接口
- 接口容許同一個接口具備多個不一樣的具體實現.在簡單的狀況中,他的體現形式一般是一個接受接口類型的方法,而該接口的實現和向該方法傳遞的對象則取決於方法的使用者.
7.接口中的域
- 在Java SE5以前,在的接口中定義域(static&final)是產生於enum具備相同效果的類型的惟一途徑.
- 在接口中定義的域不能是"空final",可是能夠被很是量表達式初始化.
- 域不是接口的一部分,它們的值被存儲在該接口的靜態存儲區域內.
8.嵌套接口
- 接口能夠嵌套類或其餘接口中.
- 嵌套在另外一個接口中的接口自動就是public的,而不能聲明爲private的.
- 當實現某個接口時,並不須要實現嵌套在其內部的任何接口.
- private接口不能再定義它的類以外被實現.
9.接口與工廠
- 接口是實現多重繼承的途徑,而生成遵循某個接口的對象的典型方式就是工廠方法設計模式.
- 與直接調用構造器不一樣,在工廠對象上調用的是建立方法,而該工廠對象將生成接口的某個實現的對象.
- 理論上,經過這種方式,咱們的代碼將徹底與接口的實現分離,這就使得咱們能夠透明地將某個實現替換爲另外一個實現.
END設計模式