Java8是由oracle公司於2014年3月正式發布,它是繼java5 以來最重要的發布版本。Java8包含了很多新的特性,可以簡化開發,提升代碼的可讀性。
Java8的一些重要新特性包括:
l 接口增強
l 方法引用
l Lambda表達式
l Stream
其中還有一些其他的特性,比如注解的更新,以及一些新的API等。以上四個特性在java8的開發中會比較常用。因為接口增強特性比較獨立,而其他三個特性或多或少都有關聯關系。這里先記錄下接口增強特性的學習筆記。
1.什么是接口增強?
在java8以前的版本中,定義一個接口時,所有的方法必須是抽象方法,不能有具體實現,這是java語法規定的。但是在java8中定義一個接口時,在滿足特定的前提下,可以有方法的具體實現。這樣一個接口中可以有屬性,可以有抽象方法,也可以有具體的方法,這跟java8以前的接口比,明顯接口的功能變得強大了。
2.接口中如何定義具體的方法實現?
首先,接口中定義具體的方法實現是有限制的,它不能像我們在一個普通類那樣隨便定義方法實現,它只能定義default和static類型的方法。示例代碼如下:

interface MyInterface { public void print(); // default 和 static 方法的出現為了解決實現該接口的子類代碼重復的問題 default void defaultMethod() { System.out.println("default method invoked! "); } default int add(int a, int b){ return a + b; } static void staticMethod() { System.out.println("static method invoked! "); } static int multiply(int a, int b){ return a * b; } //... }
除了關鍵字修飾,其他跟普通的方法定義並沒有什么不同。
3.如何調用
1)default方法調用
定義一個類實現該接口,new該類的實例,調用即可。
2)static方法調用
類名.方法名() 調用,這跟以前的靜態方法調用方式一樣。
示例代碼如下:

public class InterfaceTest { public static void main(String[] args) { MyInterface msg = new InterfaceImpl(); msg.print(); msg.defaultMethod(); //調用default方法 MyInterface.staticMethod(); //調用static方法 } } interface MyInterface { public void print(); // default 和 static 方法的出現為了解決實現該接口的子類代碼重復的問題 default void defaultMethod() { System.out.println("default method invoked! "); } default int add(int a, int b){ return a + b; } static void staticMethod() { System.out.println("static method invoked! "); } static int multiply(int a, int b){ return a * b; } //... }
4. 應用場景
想象這樣一中情況,當多個類實現一個接口的某個方法時,方法的具體實現代碼相同,這樣就會造成代碼重復問題。接口增強就相當於把公共的代碼抽離出來,放入接口定義中,這樣實現類對於該方法就不用重新定義,直接調用即可,這很好的解決了實現該接口的子類代碼重復的問題。