Java8是由oracle公司於2014年3月正式發佈,它是繼java5 以來最重要的發佈版本。Java8包含了不少新的特性,能夠簡化開發,提高代碼的可讀性。java
Java8的一些重要新特性包括:oracle
l 接口加強ide
l 方法引用學習
l Lambda表達式spa
l Streamcode
其中還有一些其餘的特性,好比註解的更新,以及一些新的API等。以上四個特性在java8的開發中會比較經常使用。由於接口加強特性比較獨立,而其餘三個特性或多或少都有關聯關係。這裏先記錄下接口加強特性的學習筆記。blog
1.什麼是接口加強?接口
在java8之前的版本中,定義一個接口時,全部的方法必須是抽象方法,不能有具體實現,這是java語法規定的。可是在java8中定義一個接口時,在知足特定的前提下,能夠有方法的具體實現。這樣一個接口中能夠有屬性,能夠有抽象方法,也能夠有具體的方法,這跟java8之前的接口比,明顯接口的功能變得強大了。ip
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. 應用場景
想象這樣一中狀況,當多個類實現一個接口的某個方法時,方法的具體實現代碼相同,這樣就會形成代碼重複問題。接口加強就至關於把公共的代碼抽離出來,放入接口定義中,這樣實現類對於該方法就不用從新定義,直接調用便可,這很好的解決了實現該接口的子類代碼重複的問題。