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的新特性,这样的感受会常常出现的。