1. 程式人生 > >【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.6 介面

【學習筆記】 唐大仕—Java程式設計 第4講 類、包和介面之4.6 介面

【學習筆記】 唐大仕—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可以不用再重新寫了