Java 8 default默认方法

  1. 在 Java 8 之前,接口中只允许有抽象方法和常量,而实现该接口的类必须得实现该接口所有的抽象方法,但是从 Java 8 开始,接口中允许有 default 声明的具体实现方法
  2. 其次,Java 8 开始接口中也允许定义 static 方法

1.引入 default 关键字的缘由

在Java 8 中,每种集合都有获取Stream对象的方法-stream(),按照设计理念,stream()方法在集合接口Collection中声明,但是这样的话,后续Collection的实现类都得实现该方法,对现有的架构改动重大
由此,我们引入了 default 关键字,可以直接声明该方法的具体实现,然后所有后续该接口的实现类即可直接继承该方法,无需重写,例如 Collection 中的 stream 方法:

public interface Collection<E> extends Iterable<E>{
      default Stream<E> stream(){
            // ToDo
            System.out.println("Hello,World!!!")
      }  
}

2.default关键字作用

default 是 Java8 新增的一个关键字,该关键字使用在接口当中的一个方法之前,被default声明的方法称为默认方法,该方法可以在接口中给出具体实现。从而使得该接口的实现类默认继承该方法,无需重新实现。

3.默认方法的使用

用以下代码来演示:

public class TestDefault implements MyInterface {

    @Override
    public int size() {
        // TODO Auto-generated method stub
        return 1;
    }

    public static void main(String[] args) {
        TestDefault testDefault = new TestDefault();
        MyInterface.getInfo(testDefault.size(), testDefault.isEmpty());
    }

}
// 函数式接口
interface MyInterface {
    // 抽象方法
    int size();

    // 默认方法
    default boolean isEmpty () {
        return size() == 0;
    }

    // 静态方法
    static void getInfo(int size, boolean isEmpty) {
        System.out.println("size is " + size + ", empty: " + isEmpty);
    }

}

打印结果如下:

size is 1,empty:false

© 版权声明

相关文章

暂无评论

none
暂无评论...