Java學習(介面)
一、介面概念
介面就是多各類的公共規範,一種引用資料型別
介面定義格式:
public interface 介面名稱{
//介面內容
}
換成了關鍵字interface之後,編譯生成的位元組碼檔案仍然是從 .java->.class 檔案格式的轉換
如果是Java7,介面內容中可以有:
1.常量
2.抽象方法
如果是Java8,介面內容中可以有:
3.預設方法
4.靜態方法
如果是Java9,介面內容中可以有:
5.私有方法
二、介面抽象方法
1.介面當中的抽象方法,修飾符必須是兩個固定的關鍵字:public abstract
2.這兩個修飾符關鍵字,可以省略(部分或全部)
3.方法的三要素可以根據業務隨意定義
public interface interfaceAbs{
//以下定義抽象方法的方式均正確
public abstract void method();
abstract void method();
public void method();
void method();
}
三、介面使用
1.介面不能直接使用,必須有一個“實現類”來“實現”該介面,實現格式為:
public class 實現類名稱 implements 介面名稱{
//實現類內容
}
2.介面的實現必須覆蓋重寫(實現)介面當中的所有抽象方法,在實現類中實現介面中的抽象方法時,需要去掉原本的abstract關鍵字,並加上方法體-->{ 方法體 }。
3.不能直接new介面。
4.如果實現類並沒有覆蓋重寫介面中的所有抽象方法,該實現類自身必須是抽象類。
四、介面的預設方法
1.從Java8開始,介面中可以定義預設方法,其定義方式為:
[public] default 返回值型別 方法名稱(引數列表){
//方法體
}
2.預設方法可以實現介面升級,解決為業務需要為介面新增抽象方法時,導致原有的實現類此時報錯的問題,預設方法有方法體,因此實現類可以不去重寫實現。
3.預設方法可以被實現類繼承,如果實現類當中沒有,則向上找。
4.預設方法可以被實現類覆蓋重寫。
五、介面的靜態方法
1.介面靜態方法定義方式:
[public] static 返回值型別 方法名稱(引數列表){
//方法體
}
2.靜態方法不能通過介面實現類的物件呼叫,應該是直接通過:介面名稱.靜態方法名稱(引數)的方式來呼叫。
五、介面的私有方法
1.普通私有方法:解決多個預設方法之間程式碼重複的問題
private 返回值型別 方法名稱(引數列表){
//方法體
}
2.靜態私有方法:解決多個靜態方法之間程式碼重複的問題
private static 返回值型別 方法名稱(引數列表){
//方法體
}
六、介面的常量
1.必須使用public static final修飾。
[public] [static] [final] 資料型別 常量名稱 = 資料值
2.一旦使用final關鍵字修飾,則不可以再改變。
3.介面當中的常量可以省略public static final,不寫也表示的同一個意思。
4.介面當中的常量必須進行賦值,不能不賦值。
5.介面中的常量要用大寫,多個單詞用下劃線連線
七、繼承父類並實現多個介面
1.介面沒有靜態程式碼塊或者構造方法
2.一個類的直接父類是唯一的,但是一個類可以實現多個介面
public class 類名稱 implements 介面A,介面B,......{
//類內容
}
3.如果實現類所實現的多個介面當中,存在重複的抽象方法,那麼只需要覆蓋重寫一次即可。
4.如果實現類沒有覆蓋重寫多有介面當中的所有抽象方法沒那麼實現類就必須是一個抽象類。
5.如果實現類所實現的多個介面當中,存在重複的預設方法,那麼實現類一定要對衝突的預設方法進行覆蓋重寫。
6.如果直接父類當中的方法和介面當中的預設方法產生了衝突,則優先使用父類當中的方法。
八,介面之間的多繼承
1.類與類之間是單繼承的,直接父類只有一個。
2.類與介面是多實現的,一個類可以實現多個介面。
3.介面與介面直接是多繼承的。
1)多個父介面當中的抽象方法重複,沒關係
2)多個父介面當中的預設方法重複,子介面必須進行預設方法的重寫,而且需要帶default關鍵字