一. 新特性概述概述
在Jdk8之前,Interface之中可以定義變量和方法,變量必須爲public static final的,由於實現接口中的方法必須要重寫它的方法,而子類繼承抽象類必須重寫其所有的抽象方法,所以接口中的方法必須隱式爲public abstract的。JDK1.8中允許我們在接口中定義static方法和default方法
二. 代碼示例
Jdk8之前,接口中只能有public abstract隱式修飾的抽象方法。
public interface JDK8BeforeInterface {
public static final int field1 = 0;
public abstract void method1(int a) throws Exception;
//隱式的被public abstract修飾
void method2(int a) throws Exception;
}
Jdk8及以後,允許我們在接口中定義static方法和default方法。
public interface JDK8Interface {
//static 修飾定義靜態方法
static void staticMethod(){
System.out.println("接口中的靜態方法。");
}
//default修飾符定義默認方法
default void defaultMethod() {
System.out.println("接口中的默認方法。");
}
}
代碼解析:
public interface JDK8Interface {
//static 修飾定義靜態方法
static void staticMethod() {
System.out.println("接口中的靜態方法。");
}
//default修飾符定義默認方法
default void defaultMethod() {
System.out.println("接口中的默認方法。");
}
}
定義一個接口的實現類:
public class JDK8InterfaceImpl implements JDK8Interface {
//實現接口後,因爲默認方法不是抽象方法,所以可以不重寫,但是如果開發需要,也可以重寫。
}
靜態方法,只能通過接口名來調用,不可以通過實現類的類名或者實現類的對象來調用。default方法,只能夠通過接口實現類的對象來調用。
public class Main {
public static void main(String[] args) {
//static方法必須通過接口類來調用,不可以通過實現類或者是實現類的對象來調用
JDK8Interface.staticMethod();
//default方法必須通過實現類的對象來調用
new JDK8InterfaceImpl().defaultMethod();
}
}
當然如果接口中的默認方法不能滿足某個實現類需要,那麼實現類可以覆蓋默認方法。
public class AnOtherJDK8InterfaceImpl implements JDK8Interface {
@Override
public void deaultMethod() {
System.out.println("接口實現類覆蓋了接口中的default方法");
}
}