interface的default方法和static方法
- 接口中可以定義static方法,可通過接口名稱.方法名()調用,實現類不能繼承static方法;
- 接口中可以定義default方法,default修飾的方法有方法體,表示這個方法的默認實現,子類可以直接調用,可以選擇重寫或者不重寫;
- 當實現類實現的多個接口中,有方法簽名相同的default方法時,必須重寫該方法;
接口一:
package com.skd.interfacemethod; /** * @Description * @Author virgosnail * @Date 2018/12/12 */ public interface Human { /** * 必須被重寫 */ void oldMethod(); /** * 實現類可以選擇重寫,也可以不重寫 */ default void hi(){ System.out.println("interface default method"); } /** * 不能被實現類重寫 */ static void hello(){ System.out.println("interface static method"); } }
接口二:
package com.skd.interfacemethod; /** * @Description * @Author virgosnail * @Date 2018/12/12 20:59 */ public interface Humen { default void hi(String aa){ System.out.println("interface default method"); } }
實現類:
package com.skd.interfacemethod; /** * @Description * @Author virgosnail * @Date 2018/12/12 */ public class Person implements Human,Humen { @Override public void oldMethod() { } /** * 實現的多個接口中有方法簽名相同的default 方法時,實現類必須重寫該方法 */ @Override public void hi() { } /** * 實現類不能繼承接口的static 方法 */ }
測試類:
package com.skd.interfacemethod; /** * @Description * @Author virgosnail * @Date 2018/12/12 */ public class Test { public static void main(String[] args) { // interface 的 default 方法通過實現類的實例對象調用 new Person().hi(); // interface 的 static 方法通過 接口名稱.方法名稱直接調用 Human.hello(); } }