Java語言中接口的定義及實現

導語:在Java中,除了使用抽象類來實現一定程度的抽象外,還可以定義一種特殊的“抽象類”:接口。下面就由小編爲大家介紹一下Java語言中接口的定義及實現,歡迎大家閱讀!

Java語言中接口的定義及實現

  引言

在Java語言中爲了使程序設計變得簡單清晰,不允許類的多重繼承,只允許單重繼承,即一個類只能有一個直接父類。這雖然簡化了程序的結構,但也喪失了編寫程序的靈活性,減弱了面向對象程序設計的代碼複用功能。因此需要引進其他的機制來幫助實現類似於類的多重繼承的功能,這就是Java語言中的接口(interface)。

接口是一種完全沒有實現的類,在接口中只包含了抽象的方法和常量的定義。與類不同的是,接口的定義使用interface關鍵字,而類的定義使用class關鍵字。實際上,接口是一種特殊的抽象類,這種抽象類中只包含常量和方法的定義,沒有變量和方法的實現。即接口是一種概念性的模型,它有助於類層次結構的設計。某些代碼設計的方法是首先設計所有的接口和類,然後再設計實現接口。這樣會避免代碼集成時出現的許多問題。以這種方式進行的設計通常更爲通用而且更易於擴展。

接口的用處主要體現在以下幾個方面:

①可以實現不相關類的相同行爲,而不需要考慮這些類之間的層次關係。②可以指明多個類需要實現的方法。③可以理解對象的交互界面,而不需要了解對象所對應的類。

  1接口的定義

接口的定義包括兩個部分:聲明部分和接口體。

1.1 接口的聲明接口用interface關鍵字來聲明,接口聲明的一般格式爲:

[修飾符]interface<接口名>[extends<父類接口列表>]{

接口體

}

其中

修飾符:爲接口的訪問權限,有public和缺省兩種狀態。public表示任意類均可使用這個接口。缺省情況下,只有與該接口定義在同一包中的類纔可以訪問這個接口,而其他包中的類無權訪問該接口。

接口名:爲Java中的合法標識符。

父類接口列表:一個接口可以繼承其它接口,可通過關鍵字extends來實現,其語法與類的繼承相同。被繼承的接口爲父類接口,當有多個父類接口時,用逗號“,”分隔開。子接口可以繼承父接口的所有常量和方法。

1.2 接口體接口體是包含在一對大括號中的部分,由常量定義和方法定義兩個部分。

1.2.1 常量定義常量定義的格式如下:

[public][static][final]<常量類型><常量名>=<常量值>

其中

public static final:接口中的常量只能被public static final修飾,即使沒有在聲明中顯式修飾而使用系統默認也是一樣,接口中的常量必須被賦予常量值,並且在繼承這個接口的類也不能改變它的值。

常量類型:可以是任何類型。

常量名:爲Java中的合法標識符,通常大寫。

1.2.2 方法定義方法定義的格式如下:

[public][abstract]<返回值類型><方法名(參數列表)>

接口中只進行方法的聲明,而不提供方法的實現。所以方法定義沒有方法體,且用分號“;”結尾。接口中的方法默認是由public abstract修飾的,因此不管是否有修飾符顯式修飾接口中的方法都是公共的抽象方法。

如果在子類接口中定義了和父類接口中同名的常量和相同的方法,則父類接口中的常量被隱藏,方法被重寫。

  2方法的實現

一個接口可以被一個或多個類實現。當一個類實現一個接口,它必須實現接口中所有的方法,用關鍵字implements實現接口。一個類還可以實現多個接口,各接口用逗號“,”隔開,實現接口的語句格式如下:

class<類名>implements接口名1,接口名2,……

在類體中可以使用接口中定義的常量,由於接口中的方法爲抽象方法,所以必須在類體中加入要實現接口方法的代碼,如果一個接口是從別的一個或多個父接口中繼承而來的`,則在類體中必須加入實現該接口及其父接口中所有方法的代碼。在實現接口時,類中對方法定義要和接口中的相應方法的定義相匹配,其方法名、方法返回值類型、方法的訪問權限和參數的數目與類型等都要一致。

  3接口和抽象類的區別

抽象類和接口在Java語言中都是用來進行抽象類定義的。在面向對象的概念中,所有的對象都是通過類來描述的,但並不是所有的類都是用來描繪對象的,如果一個類中沒有包含足夠的信息來描繪一個具體的對象,這樣的類就是抽象類。抽象類往往用來表徵在對問題領域進行分析、設計中得出的抽象概念,是對一系列看一去不同,但是本質上相同的具體概念的抽象。

抽象類和接口是不同的,具體區別如下:

抽象類中可以定義成員變量和成員方法,其中可含有非抽象的成員方法。而接口中只能定義常量和沒有實現的方法,方法完全是抽象的,只有聲明,沒有方法的具體實現。

一個子類只能繼承一個抽象類,但一個子類可以實現多個接口。

抽象類和接口有相同的地方,二者都不能實例化。