什麼是介面?如何定義介面?如何實現介面?

kaikeba發表於2020-11-26

在JAVA程式語言中是一個抽象型別,是抽象方法的集合,介面通常以interface來宣告。一個類通過繼承介面的方式,從而來繼承介面的抽象方法。

如用關鍵字interface,你可以從類的實現中抽象一個類的介面。也就是說,用interface,你可以指定一個類必須做什麼,而不是規定它如何去做。

介面在語句構成上與類相似,但是它們缺少例項變數,而且它們定義的方法是不含方法體的。實際上,這意味著你可以定義不用假設它們怎樣實現的介面。一旦介面被定義,任何類成員可以實現一個介面。而且,一個類可以實現多個介面。

要實現一個介面,介面定義的類必須建立完整的一套方法。然而,每個類都可以自由的決定它們自己實現的細節。通過提供interface關鍵字,Java允許你充分利用多型性的“一個介面,多個方法”。

介面是為支援執行時動態方法解決而設計的。通常,為使一個方法可以在類間呼叫,兩個類都必須出現在編譯時間裡,以便Java編譯器可以檢查以確保方法特殊是相容的。這個需求導致了一個靜態的不可擴充套件的類環境。

在一個系統中不可避免會出現這類情況,函式在類層次中越堆越高以致該機制可以為越來越多的子類可用。介面的設計避免了這個問題。它們把方法或方法系列的定義從類層次中分開。因為介面是在和類不同的層次中,與類層次無關的類實現相同的介面是可行的。這是實現介面的真正原因所在。

介面定義
介面定義很像類定義。下面是一個介面的通用形式:

access interface name { 
 return-type method-name1(parameter-list); 
 return-type method-name2(parameter-list); 
 type final-varname1 = value; 
 type final-varname2 = value; 
 // ... 
 return-type method-nameN(parameter-list); 
 type final-varnameN = value; 
}

這裡,access要麼是public,要麼就沒有用修飾符。當沒有訪問修飾符時,則是預設訪問範圍,而介面是包中定義的惟一的可以用於其他成員的東西。

當它宣告為public時,則介面可以被任何程式碼使用。name是介面名,它可以是任何合法的識別符號。注意定義的方法沒有方法體。它們以引數列表後面的分號作為結束。

它們本質上是抽象方法;在介面中指定的方法沒有預設的實現。每個包含介面的類必需實現所有的方法。

介面宣告中可以宣告變數。它們一般是final 和static型的,意思是它們的值不能通過實現類而改變。它們還必須以常量值初始化。

如果介面本身定義成public ,所有方法和變數都是public的。

下面是一個介面定義的例子。它宣告瞭一個簡單的介面,該介面包含一個帶單個整型引數的callback( )方法。

interface Callback { 
 void callback(int param); 
}

實現介面

一旦介面被定義,一個或多個類可以實現該介面。為實現一個介面,在類定義中包括implements 子句,然後建立介面定義的方法。一個包括implements 子句的類的一般形式如下:

access class classname [extends superclass] 
 [implements interface [,interface...]] { 
 // class-body 
}

這裡,access要麼是public的,要麼是沒有修飾符的。如果一個類實現多個介面,這些介面被逗號分隔。如果一個類實現兩個宣告瞭同樣方法的介面,那麼相同的方法將被其中任一個介面客戶使用。實現介面的方法必須宣告成public。而且,實現方法的型別必須嚴格與介面定義中指定的型別相匹配。

下面是一個小的實現Callback介面的例子程式:

class Client implements Callback { 
 // Implement Callback's interface 
 public void callback(int p) { 
 System.out.println("callback called with " + p); 
 } 
}

注意callback( )用public 訪問修飾符宣告。
注意:當實現一個介面方法時,它必須宣告成public。

類在實現介面時定義它自己的附加的成員,既是允許的,也是常見的。例如,下面的Client版本實現了callback( )方法,並且增加了nonIfaceMeth( )方法。

class Client implements Callback { 
 // Implement Callback’s interface 
 public void callback(int p) { 
 System.out.println(“callback called with “ + p); 
 } 
 void nonIfaceMeth() { 
 System.out.println(“Classes that implement interfaces “ + 
 “may also define other members, too.); 
 } 
}

開課吧小編:介面分享就結束了,下一篇分享通過介面引用實現介面,希望大家能夠喜歡。

相關文章