java8 中的interface

提到java的interface大家一定不会陌生。Interface长期以来是作为一个约定存在。就如汽车上要开一个天窗,那就需要按照天窗所具有的行为来对汽车进行设计。这样我们看到所有的车上面的天窗就具有相同的行为。

public interface Sunroof {
    void open();
    void close();
}

值得注意的是,interface指定的方法均为public,这也是区别于abstract class的其中一个方面。

在java8的interface中引入了两个关键字static和default。顾名思义,default是作为默认的方法存在,static则是默认不能覆盖的方法。

public interface Sunroof {
    
    default void open() {
        System.out.println("open sunroof");
    }
    
    static void close() {
        System.out.println("close sunroof");
    }

}

这样做的好处是什么呢,考虑每一辆汽车都有open和close的操作,如果每一个拥有Sunroof的汽车都要重写一遍相同的open和close,是很让人烦躁的。
原有的解决方案是新建一个基类vehicle,这个基类中有open和close的实现,所有的车辆都继承自这个vehicle,那么也就拥有了天窗的open和close功能。

public abstract class Vehicle implements Sunroof {
    public void open() {
        System.out.println("open sunroof");
    }

    static void close() {
        System.out.println("close sunroof");
    }

}

所以,从java8之后,就不需要再新增这个基类了,只需要在interface中实现对应的default或者static即可。

你可能感兴趣的:(java8 中的interface)