接口技術(shù)主要用來描述類具有什么功能,而并不給出每個(gè)功能的具體實(shí)現(xiàn)。一個(gè)類可以實(shí)現(xiàn)(implement)一個(gè)或多個(gè)接口,并在需要接口的地方,隨時(shí)使用實(shí)現(xiàn)了相應(yīng)接口的對象。
接口不是類,而是一組對類的需求描述,這些類要遵從接口描述的統(tǒng)一格式進(jìn)行定義。
如Comparable接口
public interface Comparable<T>
{
int compareTo(T other);
}
例如,在實(shí)現(xiàn)Comparable<Employee>接口的類型中,必須提供以下方法:
int compareTo(Employee other)
也可以使用沒有類型參數(shù)的Comparable類型,但必須手工地將compareTo方法的參數(shù)轉(zhuǎn)換成所希望的類型。
接口中的所有方法自動地屬于public,因此在接口中聲明方法時(shí),不必提供關(guān)鍵字public。但是在實(shí)現(xiàn)接口時(shí),必須把方法聲明為public。
在接口中還可以定義成員變量(常量),接口中的域被自動地設(shè)為public static final。
然而,接口絕不能含有實(shí)例域,也不能在接口中實(shí)現(xiàn)方法,提供實(shí)例域和方法實(shí)現(xiàn)的任務(wù)應(yīng)該由實(shí)現(xiàn)接口的那個(gè)類來完成。
為了讓類實(shí)現(xiàn)一個(gè)接口,通常需要下面兩個(gè)步驟:
1.將類聲明為實(shí)現(xiàn)給定的接口,使用關(guān)鍵字implements;
如:class Employee implements Comparable
2.對接口中的所有方法進(jìn)行定義。
接口也可以繼承接口,使用關(guān)鍵字extends。
接口不是類,不能使用new運(yùn)算符實(shí)例化一個(gè)接口。
盡管不能構(gòu)造接口對象,卻能聲明接口變量,接口變量必須引用實(shí)現(xiàn)了接口的類對象。
Comparable x;
x=new Employee(…);
與使用instanceof檢查一個(gè)對象是否屬于某個(gè)特定類一樣,也可以用instanceof檢查一個(gè)對象是否屬于某個(gè)特定的接口。
接口也可以像類一樣建立繼承關(guān)系。
盡管每個(gè)類只能擁有一個(gè)超類,但卻可以實(shí)現(xiàn)多個(gè)接口,使用逗號將實(shí)現(xiàn)的各個(gè)接口分隔開。
C++允許一個(gè)類有多個(gè)超類,此特性稱為多繼承(multiple inheritance),而Java的設(shè)計(jì)者選擇了不支持多繼承,使用接口機(jī)制來實(shí)現(xiàn)多繼承的大部分功能。