天天看點

java8中接口中的default方法

在java8以後,接口中可以添加使用default或者static修飾的方法,在這裡我們隻讨論default方法,default修飾方法隻能在接口中使用,在接口種被default标記的方法為普通方法,可以直接寫方法體。

實作類會繼承接口中的default方法

如果接口A中有default方法:

public interface A {
  public default void a(){
    System.out.println("這是A");
  }
}      

Test類實作接口A:

public class Test implements A{

}      

那麼Test類将會繼承接口A中的a方法:

public class Test2 {
  public static void main(String[] args) {
    Test t = new Test();
    t.a();
  }
}      

2.如果一個類同時實作接口A和B,接口A和B中有相同的default方法,這時,該類必須重寫接口中的default方法

為什麼要重寫呢?是因為,類在繼承接口中的default方法時,不知道應該繼承哪一個接口中的default方法。

接口A:

public interface A {
  public default void a(){
    System.out.println("這是A");
  }
}      

接口B:

public interface B {
  public default void a(){
    System.out.println("這是B");
  }
}      

Test類:

3.如果子類繼承父類,父類中有b方法,該子類同時實作的接口中也有b方法(被default修飾),那麼子類會繼承父類的b方法而不是繼承接口中的b方法

接口A:

public interface A {
  public default void b(){
    System.out.println("AAA");
  }
}      

類C:

public class C {
  public void b(){
    System.out.println("CCC");
  }
}      

子類:

public class Test extends C implements A{

}      

測試類:

說明子類繼承的b方法為父類C中的b方法,不是接口中的default b(){}方法。