java 8 default關鍵字

java 8當中引入了一些新的特性,最近咱們會陸續介紹這些特性,從default開始。java

一直以來,咱們有一個認識,interface當中是不能有方法實現的,可是從java 8開始,這個事變了,由於有了default這個關鍵字。直接來看一下代碼:ide

public interface RichInterface {
    default void sayHello(){
        System.out.println("Hello");
    }
}

咱們聲明瞭一個RichInterface接口,在其中定義了一個sayHello方法,這個方法是有具體實現的。spa

而後,咱們實現這個接口:scala

public class RichImpl implements RichInterface {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }
}

咱們不須要實現sayHello方法,並且能夠直接使用它。繼承

那麼下一個問題,我可不能夠override這個方法。接口

public class RichImpl implements RichInterface {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }

    @Override
    public void sayHello(){
        System.out.println("Hello, I am RichImpl");
    }
}

答案是確定的。it

繼續下一個問題,java是不容許多重繼承的,可是有了default這個關鍵字,貌似咱們能夠經過它來實現相似的多重繼承。class

再新建一個interface:基礎

public interface RichInterface1 {
    default void sayByebye(){
        System.out.println("Byebye");
    }
}

同時實現這兩個interface:方法

public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
        ri.sayByebye();
    }
}

很好,一切都跟咱們想的同樣。

繼續~~~

若是2個interface有相同的default方法怎麼辦?

咱們修改一下RichInterface1:

public interface RichInterface1 {
    default void sayByebye(){
        System.out.println("Byebye");
    }
    default void sayHello() {
        System.out.println("Hello, Im another RichInterface");
    }
}

這個時候,RichImpl必定會報錯對不對(鬼知道我該用哪個?),那麼應該怎麼辦呢?沒錯,override一下就行了:

public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.sayHello();
    }

    @Override
    public void sayHello(){
        System.out.println("Hello I am RichImpl");
    }
}

繼續~~~

咱們可不能夠在2個interface當中實現overload的效果,猜想是能夠的,上代碼:

public interface RichInterface {
    default void printContent(String s){
        System.out.println(s);
    }
}
public interface RichInterface1 {
    default void printContent(Double d){
        System.out.println(d);
    }
}
public class RichImpl implements RichInterface, RichInterface1 {
    public static void main(String[] args){
        RichImpl ri = new RichImpl();
        ri.printContent(0.0);
        ri.printContent("0.0");
    }
}

很好,一切都和咱們的預想同樣。

基本上,default的內容就這麼多了,若是你們對scala有必定了解,或者讀過我以前的scala基礎的文章,會感受,這個東西其實跟scala當中的trait有點像了,沒錯,並且,隨着你愈來愈多的瞭解java 8的新特性,這樣的感受會常常出現的。

相關文章
相關標籤/搜索