【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.6 介面
阿新 • • 發佈:2018-11-04
【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.6 介面
介面(interface)
- 介面,某種特徵的約定
定義介面interface
所有方法都自動是public abstract
實現介面implements
可以實現多繼承
與類的繼承關係無關 - 面向介面程式設計,而不是面向實現
Flyable f = new Bird()
Java中有大量的介面
其中Flyable為一個介面 Bird為實現此介面的一個類
介面的作用
- 1.通過介面可以實現不相關類的相同行為,而不需要考慮這些類之間的層次關係,從而在一定意義上實現了多重繼承
- 通過介面可以指明多個類需要實現的方法
- 通過介面可以瞭解物件的互動介面,而不需要了解物件所對應的類
示例
- 下面我們給出一個介面的定義:
interface Collection{
void add(Object obj); void delete(Object obj); Object find(Object obj); int size(); }
- 通常介面以able或iable結尾,表名介面能完成一定的行為
- 介面宣告中還可以包括對介面訪問許可權以及它的父介面列表。完整的介面宣告如下
[public]interface interfaceName [extends listOfSuperInterface]{ ......; }
- 其中public指明任意類均可以使用這個介面,預設情況下,只有與該介面定義在同一個包中的類才可以訪問這個介面
- extends子句與類宣告中的extends子句基本相同,不同的是一個介面可以有多個父介面,用逗號隔開,而一個類只能有一個父類。子介面繼承父介面中所有的常量和方法
介面型別
- 介面可以作為一種引用型別來使用。任何實現該介面的類的例項都可以儲存在該結構型別的變數中,通過這些變數可以訪問類所實現的介面中的方法。Java執行時系統動態地確定該使用哪個類中的方法
- 把介面作為一種資料型別可以不需要了解物件所對應的具體的類,以前面所定義的介面Collection和實現該介面的類FIFOQueue為例,下例中,我們以Collection作為引用型別來使用
class InterfaceType{
public static void main(String args[]){ Collection c = new FIFOQueue(); ...... c.add(obj); ... } }
介面中的常量
- 介面體重可以包含常量定義
- 常量定義的格式為:type NAME = value;
- 其中type可以是任意型別,NAME是常量名,通常都大寫,value是常量值
- 在介面中定義的常量可以被實現該介面的多個類所共享,它與C中用#define以及C++中用const定義的常量是相同的
- 在介面中定義的常量具有public,static,final的屬性
列舉
- 從JDK1.5起,可以使用列舉
enum Light{ Red, Yellow, Green }
- 使用:
Light light = Light.Red;
switch( light ){ case Red:...break; }
- Java中的列舉是用class來實現的,可以複雜地使用
Java8中的介面
- Java8以上,介面成員還可以是:
static方法
具有實現體的方法(default方法)
預設方法的好處是:提供了一個預設實現,子類在implements可以不用再重新寫了