JDK1.8新特性之接口中的靜態方法與默認方法

一. 新特性概述概述

在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方法");

        }

}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章