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

相关文章
相关标签/搜索