java8之接口增強


  Java8是由oracle公司於2014年3月正式發布,它是繼java5 以來最重要的發布版本。Java8包含了很多新的特性,可以簡化開發,提升代碼的可讀性。

  Java8的一些重要新特性包括:

      l 接口增強

      l 方法引用

      l Lambda表達式

      l Stream

  其中還有一些其他的特性,比如注解的更新,以及一些新的API等。以上四個特性在java8的開發中會比較常用。因為接口增強特性比較獨立,而其他三個特性或多或少都有關聯關系。這里先記錄下接口增強特性的學習筆記。

1.什么是接口增強?

  在java8以前的版本中,定義一個接口時,所有的方法必須是抽象方法,不能有具體實現,這是java語法規定的。但是在java8中定義一個接口時,在滿足特定的前提下,可以有方法的具體實現。這樣一個接口中可以有屬性,可以有抽象方法,也可以有具體的方法,這跟java8以前的接口比,明顯接口的功能變得強大了。

2.接口中如何定義具體的方法實現?

  首先,接口中定義具體的方法實現是有限制的,它不能像我們在一個普通類那樣隨便定義方法實現,它只能定義defaultstatic類型的方法。示例代碼如下:

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;
    }
    
    //...
}
View Code

  除了關鍵字修飾,其他跟普通的方法定義並沒有什么不同。

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;
    }
    
    //...
}
View Code

 

4. 應用場景

  想象這樣一中情況,當多個類實現一個接口的某個方法時,方法的具體實現代碼相同,這樣就會造成代碼重復問題。接口增強就相當於把公共的代碼抽離出來,放入接口定義中,這樣實現類對於該方法就不用重新定義,直接調用即可,這很好的解決了實現該接口的子類代碼重復的問題。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM