在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(){}方法。