關於java8接口中默認方法的使用


java8在接口中引入了默認方法,通過在方法前加上default關鍵字就可以在接口中寫方法的默認實現,有點類似於C++中的多繼承,但是當多個接口或父類中有相同簽名的方法時,會引發一些問題,經過實驗得出如下結論:

1.當繼承的父類和實現的接口中有相同簽名的方法時,優先使用父類的方法。

2.當接口的父接口中也有同樣的默認方法時,就近原則調用子接口的方法。

3.當實現的多個接口中有相同簽名的方法時,必須在實現類中通過重寫方法解決沖突問題,否者無法通過編譯,在重寫的方法中可以通過 接口名.super.方法名(); 的方式顯示調用需要的方法。

例子如下:

有一個類和兩個接口

public class A {
    public void methods(){
        System.out.println("Object A methods");
    }
}
public interface B {
    default void methods(){
        System.out.println("interface B methods");
    }
}
public interface C {
    default void methods(){
        System.out.println("interface C methods");
    }
}
下面通過一個類繼承自A並且實現B接口:

public class Test extends A implements B{
    public static void main(String[] args){
        System.out.println("HelloWord!");
        Test test = new Test();
        test.methods();
    }
}
根據就近原則test將調用父類A的方法並輸出"Object A methods"

如果一個類同時實現了接口B和C:

public class Test1 implements B, C {

    public static void main(String[] args){
        System.out.println("HelloWord!");  Test1 test1 = new Test();  test1.methods();  }

    @Override  public void methods() {
        B.super.methods();
    }
}
通過使用Override重寫的方式解決沖突問題,並且在Override方法中通過B.super.methods();的方式顯示指定調用B接口中methods方法,最終輸出結果為:“interface B methods”


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM