《java編程思想系列6》 接口

一、抽象類和抽象方法

抽象方法:僅有聲明而沒有方法體

abstract void f();

包含抽象方法的類叫做抽象類。如果一個類包含一個或者多個抽象方法,該類必須被限定爲抽象的。(否則編譯器就會報錯)

如果從一個抽象類繼承,並想創建該新類的對象,那麼久必須爲基類中的所有的抽象方法提供方法定義。如果不這麼做,那麼導出類便也是抽象類,且編譯器將會強制我們用abstract關鍵字來限定這個類

我們也可能創建一個沒有任何抽象方法的抽象類:
考慮這樣一種情況,我們有一個類,讓其包含任何abstract方法都顯得沒有實際意義,但是我們也想要阻止產生這個類的任何對象。

二、接口

interface關鍵字產生一個完全抽象的類,它根本沒有提供任何具體的實現。它允許創建者確定方法名、參數列表和返回類型,但是沒有任何方法體。接口只提供了形式,而未提供任何具體實現。

要想創建一個接口,需要用interface關鍵字來替代class關鍵字。就像類一樣,可以在interface關鍵字前面添加public關鍵字,如果不添加public關鍵字,則它只具有包訪問權限,這樣它就只能在同一個包內使用。

接口也可以包含域,但是這些域隱式的是static和final的。

可以選擇在接口彙總顯式的將方法聲明爲public的,但是即使不這麼做,它們也是public的。因此,當要實現一個接口的時候,在接口中被定義的方法必須定義爲public的,否則,它們就只有默認的包訪問權限,這樣在方法被繼承的時候,其可訪問權限就降低了,這是java編譯器所不允許的。


三、完全解耦

適配器設計模式

四、java中的多重繼承

在c++中,組合多個類的接口的行爲被稱作多重繼承。它可能會使你揹負沉重的包袱,因爲每個類都有一個具體實現。在java中,你可以執行相同的行爲,但是隻有一個類可以有具體實現,因此通過組合多個接口,c++的問題是不會再java中發生的。

當將一個具體類和多個接口組合在一起的時候,這個具體類必須放在前面,後面跟着的纔是接口(否則編譯器會報錯)

使用接口的核心原因:
1)爲了能夠向上轉型爲多個基類型(以及由此而帶來的靈活性)
2)與抽象類相同:防止客戶端程序員創建該類的對象,並確保這僅僅是建立一個接口。

我們應該使用抽象類還是使用接口?
如果要創建不帶任何方法定義和成員變量的基類,那麼久應該選擇接口而不是抽象類。事實上,如果知道某事物應該成爲一個基類,那麼第一選擇就應該是使它成爲一個接口

五、通過繼承來擴展接口

接口繼承:
1)在接口中添加新的方法聲明
2)通過繼承在新接口中組合數個接口

一般情況下,只可以將extends用於單一類,但是可以引用多個基類接口:

1、組合接口時候的名字衝突
六、適配接口

適配器模式:Scanner類

七、接口中的域

1)因爲你放入接口中的任何域都自動是static和final的,所以接口就成爲了一種很便捷的用來創建常量組的工具。在java SE5之前,這是產生於c或者c++enum具有相同效果的類型的唯一途徑

2)在接口中定義的域不能是“空final”的,但是可以被非常量表達式初始化。
當然,這些域不是接口的一部分,它們的值被存儲在該接口的靜態存儲區域內。

八、嵌套接口

九、接口與工廠

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