咱們一般所說的接口的做用是用於定義一套標準、約束、規範等,接口中的方法只聲明方法的簽名,不提供相應的方法體,方法體由對應的實現類去實現。ide
在JDK1.8中打破了這樣的認識,接口中的方法能夠有方法體,但須要關鍵字static或者default來修飾,使用static來修飾的稱之爲靜態方法,靜態方法經過接口名來調用,使用default來修飾的稱之爲默認方法,默認方法經過實例對象來調用。 測試
靜態方法和默認方法都有本身的方法體,用於提供一套默認的實現,這樣子類對於該方法就不須要強制來實現,能夠選擇使用默認的實現,也能夠重寫本身的實現。當爲接口擴展方法時,只須要提供該方法的默認實現便可,至於對應的實現類能夠重寫也能夠使用默認的實現,這樣全部的實現類不會報語法錯誤:Xxx不是抽象的, 而且未覆蓋Yxx中的抽象方法。spa
接口:3d
package com.swpu.newJDk; public interface DefaultInterface { public int k=10 ; void commonMethod(); default void defaultMethod(){ System.out.println("接口的默認方法"); } static void staticMethod(){ System.out.println("接口的靜態方法"); } }
測試:code
package com.swpu.newJDk; /** * @ClassName Test * @Description TODO * @Author 王旭龍 * @Date 2019/9/9 14:53 */ public class Test { public static void main(String[] args) {
//匿名實現類 DefaultInterface defaultInterface = new DefaultInterface() { @Override public void commonMethod() { System.out.println("之前接口的普通方法,須要重寫"); } }; defaultInterface.commonMethod(); defaultInterface.defaultMethod(); DefaultInterface.staticMethod(); System.out.println(DefaultInterface.k); } }
結果:對象
接口裏static修飾的staticMethod 的調用時 接口名.方法 不能直接用示例對象調用。用default修飾的方法用實例對象調用,接口的成員變量是 public static final 修飾 直接blog