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的新特性,這樣的感受會常常出現的。