Java 8 -----------默認方法

Java 8 新增了接口的默認方法。java

簡單說,默認方法就是接口能夠有實現方法,並且不須要實現類去實現其方法。編程

咱們只需在方法名前面加個default關鍵字便可實現默認方法。框架

爲何要有這個特性?ide

首先,以前的接口是個雙刃劍,好處是面向抽象而不是面向具體編程,缺陷是,當須要修改接口時候,須要修改所有實現該接口的類,目前的java 8以前的集合框架沒有foreach方法,一般能想到的解決辦法是在JDK裏給相關的接口添加新的方法及實現。然而,對於已經發布的版本,是無法在給接口添加新方法的同時不影響已有的實現。因此引進的默認方法。他們的目的是爲了解決接口的修改與現有的實現不兼容的問題。

spa

1.語法

默認方法語法格式以下:code

public interface Vehicle { default void print() { System.out.println("我是一輛車!"); } }

2.多個默認方法

一個接口有默認方法,考慮這樣的狀況,一個類實現了多個接口,且這些接口有相同的默認方法,如下實例說明了這種狀況的解決方法:blog

 

public interface Vehicle { default void print() { System.out.println("我是一輛車!"); } } public interface FourWheeler { default void print() { System.out.println("我是一輛四輪車!"); } }

此時建立類實現以上兩個接口會出現一點問題接口

解決方法以下:class

第一個解決方案是建立本身的默認方法,來覆蓋重寫接口的默認方法:foreach

public class Car implements vehicle, fourWheeler { @Override public void print() { System.out.println("我是一輛四輪汽車!"); } }

第二種解決方案可使用 super 來調用指定接口的默認方法:

public class Car implements Vehicle, FourWheeler { @Override public void print() { vehicle.super.print(); } }

3.靜態默認方法

Java 8 的另外一個特性是接口能夠聲明(而且能夠提供實現)靜態方法。例如:

 

public interface vehicle {     default void print() {         System.out.println("我是一輛車!");     }     // 靜態方法
    static void blowHorn() {         System.out.println("按喇叭!!!");     } }
相關文章
相關標籤/搜索