jdk1.8关键字defalut

概述:

最近打算研究jdk中集合的源码类,经过一番搜索,终于找到了jdk1.8的源码,在打开jdk源码的Iterable接口时,发现了一个定义接口方法,自己从没用过的关键字defalut。在此做简要介绍。

Iterable接口

Iterable源码如下(删除了代码中的注释)

package java.util;

import java.util.function.Consumer;

public interface Iterator {

    boolean hasNext();

    E next();

    default void remove() {
        throw new UnsupportedOperationException("remove");
    }

    default void forEachRemaining(Consumersuper E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

通过观察源码可以知道,default修饰的remove方法,和forEachRemaining方法都有了方法体。这与jdk之前接口定义规则是相悖的(接口只能定义方法,不能含有方法的具体实现)。
简单搜了一下jdk1.8语法新特性,发现default关键字修饰方法,是1.8新加入的语法。通过default关键字定义接口方法类似于c++ 中的虚函数。也就是说,实现类可以选择实现defualt修饰的方法,也可以选择不实现。如果实现了,子类就相当于覆盖了该方法,运行结果遵循java多态特性。

测试列子

package main;

public interface TestDefaultInterface {
    default public void method1() {
        System.out.println("method in interface");
    }

    default public void method2() {
        System.out.println("method in inteface");
    }
}
public class MyImpl implements TestDefaultInterface{

 public void method1(){
 System.out.println("method in Class");
}

public static void main (String [] args){
MyImpl d = new MyImpl();
d.method1();
d.method2();
}
}

測試結果:
jdk1.8关键字defalut_第1张图片
希望对您有所帮助!

你可能感兴趣的:(java)