1. 程式人生 > >深入分析java8新特性

深入分析java8新特性

上一篇文章參考ImportNew,對Java8語言新特性進行了大概分析。這篇文章我們深入分析一下新特性之一:介面的預設方法。 在java8之前,介面中的方法僅僅是一個定義,是沒有方法體的。這也是它和抽象類的一個差別。 在java8中,介面中新引入了預設方法。

什麼是預設方法? 即方法使用default進行修飾,並且有具體的實現。如下面的Collection介面中的stream()方法。

default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

知道了預設方法的定義後,我們來思考為什麼要引入預設方法? 首先介面的好處我們是知道的,介面是一種規範。我們會定義介面,在其中宣告一些變數和方法,然後再寫一些實現類,“介面+實現”最常見的優勢就是實現類和介面分離,在更換實現類的時候,不用更換介面功能。這也是面向物件的一種體現。但介面的缺陷也是很明顯的,那就是當我們修改介面時,要修改這介面所有的實現類。這種修改的影響範圍很大,對於已經發布的版本修改起來很麻煩,有的也不能隨意進行修改。而預設方法就很好的解決了這個問題。預設方法很好的解決介面的修改與現有的實現不相容的問題。我們在介面中加上預設方法,那他的實現類都會繼承該預設方法。

下面舉個例子:

public interface Father {
    default void func(){
        System.out.println("Father func");
    }
}
public class Test1 implements Father{
    public static void main(String[] args) {
        Test1 test1 = new Test1();
        test1.func();
    }
}

輸出Father func