接口中的抽象方法注意就是供子類(實現類)重寫的
注意:
接口的實現類如果是普通類,那么必須重寫接口中的所有抽象方法
接口的實現類如果是抽象類,那么可以不用重寫接口中的抽象方法
public interface LiveAble { // 定義抽象方法 public abstract void eat(); public abstract void sleep(); }
定義實現類:
public class Animal implements LiveAble { @Override public void eat() { System.out.println("吃東西"); } @Override public void sleep() { System.out.println("晚上睡"); } }
定義測試類:
public class InterfaceDemo { public static void main(String[] args) { // 創建子類對象 Animal a = new Animal(); // 調用實現后的方法 a.eat(); a.sleep(); } } 輸出結果: 吃東西 晚上睡
接口中默認方法的使用:在實現類中使用或者實現類對象中使用
可以繼承,可以重寫,二選一,但是只能通過實現類的對象來調用。
舉例:繼承默認方法,代碼如下:
定義接口:
public interface LiveAble { public default void fly(){ System.out.println("天上飛"); } }
定義實現類:
public class Animal implements LiveAble { // 繼承,什么都不用寫,直接調用 }
定義測試類:
public class InterfaceDemo { public static void main(String[] args) { // 創建子類對象 Animal a = new Animal(); // 調用默認方法 a.fly(); } } 輸出結果: 天上飛
靜態與.class 文件相關,只能使用接口名調用,不可以通過實現類的類名或者實現類的對象調用
代碼如下:
定義接口:
public interface LiveAble { public static void run(){ System.out.println("跑起來~~~"); } }
定義實現類:
public class Animal implements LiveAble { // 無法重寫靜態方法 }
定義測試類:
public class InterfaceDemo { public static void main(String[] args) { // Animal.run(); // 【錯誤】無法繼承方法,也無法調用 LiveAble.run(); // } } 輸出結果: 跑起來~~~
接口中私有方法的使用
私有方法:使用 private
修飾,供接口中的默認方法或者靜態方法調用
私有非靜態方法:供默認方法使用,私有非靜態方法使用
私有靜態方法:可以供接口中所有有方法體的方法使用
如果一個接口中有多個默認方法,並且方法中有重復的內容,那么可以抽取出來,封裝到私有方法中,供默認方法去調用。