內部接口也稱為嵌套接口,即在一個接口內部定義另一個接口。舉個例子,Entry接口定義在Map接口裡面,如下代碼:
public interface Map { interface Entry{ int getKey(); } void clear(); }
如下是一些有一些強有力的理由:
一種對那些在同一個地方使用的接口進行邏輯上分組;
封裝思想的體現;
嵌套接口可以增強代碼的易讀性和可維護性;
在Java標准庫中使用內部接口的一個例子是java.util.Map和Java.util.Map.Entry。這裡java.util.Map同樣被當成命名空間使用。Entry並不屬於全局作用域范圍,which means there are many other entities that are Entries and are not necessary Map’s entries. This indicates that Entry represents entries related to the Map。
為了弄清楚內部接口是如何工作的,我們可以拿它與內部類作比較。內部類可以被認為是一個外部類內部定義的一個常規方法。因為一個方法可以被聲明為靜態和非靜態,類似的內部類也可以被聲明為靜態和非靜態。靜態類類似於靜態方法,它只能訪問外部類的靜態成員屬性。非靜態方法可以訪問外部類的所有成員屬性。
因為接口是不能實例化的,內部接口只有當它是靜態的才有意義。因此,默認情況下,內部接口是靜態的,不能你是否手動加了static關鍵字。
Map.java
public interface Map { interface Entry{ int getKey(); } void clear(); }
MapImpl.java
public class MapImpl implements Map { class ImplEntry implements Map.Entry{ public int getKey() { return 0; } } @Override public void clear() { //clear } }
譯文鏈接:http://www.programcreek.com/2013/08/inner-interface-in-java/