什么是接口
接口(英文:Interface)毛甲,在JAVA編程語言中是一個抽象類型宛畦,是抽象方法的集合,接口通常以interface來聲明猫十。一個類通過繼承接口的方式览濒,從而來繼承接口的抽象方法。
接口并不是類拖云,編寫接口的方式和類很相似贷笛,但是它們屬于不同的概念。類描述對象的屬性和方法宙项。接口則包含類要實現(xiàn)的方法乏苦。
除非實現(xiàn)接口的類是抽象類,否則該類要定義接口中的所有方法尤筐。
接口無法被實例化汇荐,但是可以被實現(xiàn)。一個實現(xiàn)接口的類盆繁,必須實現(xiàn)接口內(nèi)所描述的所有方法拢驾,否則就必須聲明為抽象類。另外改基,在 Java 中,接口類型可用來聲明一個變量咖为,他們可以成為一個空指針秕狰,或是被綁定在一個以此接口實現(xiàn)的對象。
接口與類相似點:
- 一個接口可以有多個方法躁染。
- 接口文件保存在 .java 結(jié)尾的文件中鸣哀,文件名使用接口名。
- 接口的字節(jié)碼文件保存在 .class 結(jié)尾的文件中吞彤。
- 接口相應(yīng)的字節(jié)碼文件必須在與包名稱相匹配的目錄結(jié)構(gòu)中我衬。
接口與類的區(qū)別
- 接口不能用于實例化對象。
- 接口沒有構(gòu)造方法饰恕。
- 接口中所有的方法必須是抽象方法挠羔。
- 接口不能包含成員變量,除了 static 和 final 變量埋嵌。
- 接口不是被類繼承了破加,而是要被類實現(xiàn)。
- 接口支持多重繼承雹嗦。
接口特性
- 接口中每一個方法也是隱式抽象的,接口中的方法會被隱式的指定為 public abstract(只能是 public abstract范舀,其他修飾符都會報錯)合是。
- 接口中可以含有變量,但是接口中的變量會被隱式的指定為 public static final 變量(并且只能是 public锭环,用 private 修飾會報編譯錯誤聪全。
- 接口中的方法是不能在接口中實現(xiàn)的,只能由實現(xiàn)接口的類來實現(xiàn)接口中的方法辅辩。
接口與抽象類的區(qū)別
- 抽象類中的方法可以有方法體难礼,就是能實現(xiàn)方法的具體功能,但是接口中的方法不行汽久。
- 抽象類中的成員變量可以是各種類型的鹤竭,而接口中的成員變量只能是 public static final 類型的。
- 接口中不能含有靜態(tài)代碼塊以及靜態(tài)方法(用 static 修飾的方法)景醇,而抽象類是可以有靜態(tài)代碼塊和靜態(tài)方法臀稚。
- 一個類只能繼承一個抽象類,而一個類卻可以實現(xiàn)多個接口三痰。
接口的聲明
接口聲明的格式
[操作權(quán)限] interface 接口名稱 [extends 其他的類名] {
// 聲明變量
// 抽象方法
}
- 接口是隱式抽象的吧寺,當(dāng)聲明一個接口的時候,不必使用abstract關(guān)鍵字散劫。
- 接口中每一個方法也是隱式抽象的稚机,聲明時同樣不需要abstract關(guān)鍵子。
- 接口中的方法都是公有的获搏。
接口的實現(xiàn)
[實現(xiàn)類名]...implements 接口名稱[, 其他接口, 其他接口..., ...]
實現(xiàn)接口時需要注意
- 一個類可以同時實現(xiàn)多個接口赖条。
- 一個類只能繼承一個類,但是能實現(xiàn)多個接口常熙。
- 一個接口能繼承另一個接口纬乍,這和類之間的繼承比較相似菩帝。
接口的繼承
一個接口能繼承另一個接口棕叫,和類之間的繼承方式比較相似。接口的繼承使用extends關(guān)鍵字品抽,子接口繼承父接口的方法墓贿。
// 文件名: School.java
public interface School
{
public void seStudent(String name);
public void setTeacher(String name);
}
// 文件名: Student.java
public interface Student extends School
{
public void getAge(int points);
public void getAchievement(int points);
public void getInterest(String interest);
}
// 文件名: Teacher.java
public interface Teacher extends School
{
public void getPassword(String pass);
public void getSal(double sal);
public void getAddress(String address);
public void getClass(String class);
}
Teacher接口自己聲明了四個方法茧泪,從School接口繼承了兩個方法,這樣聋袋,實現(xiàn)Teacher接口的類需要實現(xiàn)六個方法队伟。
相似的,實現(xiàn)Student接口的類需要實現(xiàn)五個方法舱馅,其中兩個來自于School接口缰泡。