當前位置:才華齋>計算機>java語言>

Java語言中介面的定義及實現

java語言 閱讀(1.11W)

導語:在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語言中都是用來進行抽象類定義的。在面向物件的概念中,所有的物件都是通過類來描述的,但並不是所有的類都是用來描繪物件的,如果一個類中沒有包含足夠的資訊來描繪一個具體的物件,這樣的類就是抽象類。抽象類往往用來表徵在對問題領域進行分析、設計中得出的抽象概念,是對一系列看一去不同,但是本質上相同的具體概念的抽象。

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

抽象類中可以定義成員變數和成員方法,其中可含有非抽象的成員方法。而介面中只能定義常量和沒有實現的方法,方法完全是抽象的,只有宣告,沒有方法的具體實現。

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

抽象類和介面有相同的地方,二者都不能例項化。