1.小結(注意):
1.接口中無法定義成員變量,但是可以定義常量,其值不可以改變,默認使用public static final修飾
2.接口中,沒有構造方法,不能創建對象
3.接口中,沒有靜態代碼塊
4.可以繼承,可以重寫,二選一,但是只能通過實現類的對象來調用
5.接口可以多實現
6.默認方法和靜態方法JDK8版本才出的.
7.接口中抽象方法使用abstract關鍵字修飾,可以省略,沒有方法體,該方法供子類實現使用.
8.靜態與.class文件相關,只能使用接口名調用,不可以通過實現類的類名或者實現類的對象調用
9. 一個接口能繼承另外一個或者多個接口,這和類之間的繼承比較相似,接口的繼承使用extends關鍵字,子接口繼承父接口的方法.如果父接口中的默認方法有重名的,那么子接口需要重寫一次
2.接口
接口,是java語言中一種引用類型,是方法的集合,如果說類的內部封裝了成員變量,構造方法,成員方法,那么接口的內部主要就是封裝了方法,包含抽象方法(JDK7以前),默認方法和靜態方法(JDK8).
接口的定義,它與定義類方式相似,但是使用interface關鍵字.它也會被編譯成.class文件,但一定要明確它不是類,而是另外一種數據類型.
引用數據類型:數組,類,接口
接口的使用,他不能創建對象,但是可以被實現(implements,類似於被繼承),一個實現接口的類,(可以看做是接口的子類),需要實現接口中所有的抽象方法,創建該類對象,就可以調用方法了,否則它必須是一個抽象類
定義格式:
public interface Inter { //抽象方法,默認省略public abstract public abstract void method1(); //默認方法 public default void method2(){ //方法體 } //靜態方法 public static void method3(){ //方法體 } }
接口可以多實現
3.抽象方法
抽象方法使用abstract關鍵字修飾,可以省略,沒有方法體,該方法供子類實現使用.
4.默認方法
使用default修飾,不可省略,供子類調用或者子類重寫
可以繼承,可以重寫,二選一,但是只能通過實現類的對象來調用
接口中,有多個默認方法時,實現類都可繼承使用,如果繼承方法有重名的,必須重寫一次
5.靜態方法
使用static修飾,供接口直接調用
靜態與.class文件相關,只能使用接口名調用,不可以通過實現類的類名或者實現類的對象調用
6.實現:
類與接口的關系為實現關系,即類實現接口,該類可以成為接口的實現類,也可以成為接口的子類,實現的動作類似繼承,格式相仿,只是關鍵字不同,實現使用implements關鍵字
非抽象子類實現接口:
-
- 必須重寫接口中的所有的抽象方法,
- 繼承了接口的默認方法,即可以直接調用,也可以重寫
接口中,存在同名的靜態方法並不會沖突,原因是只能通過各自接口名訪問靜態方法
7.優先級問題:
當一個類,既繼承了一個父類,又實現多個接口,父類中的成員方法與接口中的默認方法重名,子類就近選擇執行父類的成員方法
8.接口的多繼承:
一個接口能繼承另外一個或者多個接口,這和類之間的繼承比較相似,接口的繼承使用extends關鍵字,子接口繼承父接口的方法.如果父接口中的默認方法有重名的,那么子接口需要重寫一次
9.其他:
1.接口中無法定義成員變量,但是可以定義常量,其值不可以改變,默認使用public static final修飾
2.接口中,沒有構造方法,不能創建對象
3.接口中,沒有靜態代碼塊