問題:
眾所周知,Java中一個類可以同時實現多個接口,如果多個接口中有相同的抽象方法時,實現類實現的方法是哪個接口的??
測試
Interface1.java
/** * @author liuyiyuan */ public interface Interface2 { void method(); default void method2(){ System.out.println("Interface2的方法調用:"); method(); } }
Interface2.java
/** * @author liuyiyuan */ public interface Interface1 { void method(); //int method(); //不能通過編譯 default void method1(){ System.out.println("Interface1的方法調用:"); method(); } }
InterfaceImpl.java
/** * @author liuyiyuan */ public class InterfaceImpl implements Interface2, Interface1 { @Override public void method() { System.out.println("xxxxxxxxxxxxx"); } public static void main(String[] args) { Interface1 anInterface = new InterfaceImpl(); anInterface.method(); anInterface.method1(); Interface2 i2 = (Interface2) anInterface; i2.method(); i2.method2(); } }
輸出如下:
結論
- 實現了具有相同方法(名字相同、參數相同、返回類型相同)的多個接口時,這個方法實現是共用的
- 具有相同方法時一定要重寫,即使是default方法也要重寫
- 當方法參數不同時,方法之間為重載,互不影響
- 當返回值不同時,會發生錯誤,不能編譯