1.什麼是接口?
1.1從生活中理解:
生活中常用的接口有USB、Type-C、HDMI等等。這些接口就是做一些事情的一種規範,但具體做什麼事,需要由遵從接口的實現類來決定。
如USB接口,可以做很多事,但具體做什麼需要由連接USB接口的設備類型決定,如鼠標類用來控制光標、鍵盤類用來輸入、U盤類用來存儲數據等等。
1.2java中的接口
類似於生活中的接口,創建新接口並通過自定義接口裏的方法,從而使該接口的不同實現類對象完成不同的功能。因此可以說接口就是一系列abstract方法的集合。接口沒有對象,且本身沒有任何實現。接口不能new對象,但可以new一個引用類對象,下邊會講到。
2.接口的使用
2.1格式:
創建接口:
interface 接口名 {
成員變量//缺省屬性:public static final
成員方法//缺省屬性:public abstract
//方法中也可用default關鍵字修飾方法,擁有方法體,表示默認處理方法,是非強制實現方法
}
實現類【遵從】接口:
class 類名 implements 接口 {
//非abstract類須將接口中的方法全部實現
}
2.2接口中的繼承
接口和接口之間,允許使用extends關鍵字繼承,並且與類繼承的唯一性不同,接口繼承允許一個接口同時繼承多個接口。
理解:協議的向下兼容
interface A extends B,C
//創建同時繼承接口B、C的接口A
案例:
interface USB {
//所有USB設備必須實現的方法
void connect;
}
//接口的實現類(鼠標類)
class Mouse implements USB {
@Override
public void connect(){
system.out.println("鼠標連接USB接口");
}
}
//接口的實現類對象
class Logi extends Mouse {
@Override
public void connect(){
system.out.println("羅技鼠標已連接");
}
}
2.3接口中的多態
多態:
接口的引用指向遵從接口的實現類對象。或者說父類的引用指向子類的對象。
作用:
1.拓寬方法的參數範圍。如:方法參數爲某類型,則該類本身類對象或者其子類的類對象都可作爲參數。
2.拓寬方法的返回值範圍。
3.簡化代碼開發放,提高開發效率,整合數據類型
2.4接口中的匿名內部類
2.4.1理解
當重在使用接口中的方法,而類過於繁雜、不重要的時候,可直接通過接口new一個引用,該引用指向的是該接口的實現類對象,可通過該引用調用方法。
2.4.2使用格式
格式:
(1)
//用A接口new一個引用a,指向A的實現類對象
A a = new A() {
//大括號裏可認爲是類的本身
@Override
public void test() {
system.out.println("匿名內部類的對象賦值給接口的引用");
}
}
a.test();
(2)直接用匿名類對象調用實現的方法
new A() {
@Override
public void test() {
System.out.println("匿名內部類的匿名對象直接調用方法");
}
}.test();
(3)匿名內部類的對象直接作爲方法的參數
testInterface(new A() {
@Override
public void test() {
System.out.println("匿名內部類的匿名對象直接作爲方法的參數");
}
};
(4)需要接口A的實現類對象作爲方法的參數
public static void testInterface(A a) {
a.test();
}
2.4.3應用
優化選擇排序算法
2.5集合中的接口
除自定義接口以外,java中會提供很多接口。如集合中的【總接口】Collection。java中所有和集合有關的內容都是Collection接口的子接口。
如Collection接口下有List接口【有序可重複】、Set接口【無序不可重複】、Vector接口。
List接口下有ArrayList【可變長數組結構】、LinkedList【雙向鏈表結構】
總接口Collection中的一些常用方法被其子接口繼承。如void clear();、boolean remove();