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即可。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Java 8自Java 5(发行于2004)以来最具革命性的版本。Java 8 为Java语言、编译器、类库、开发...
    huoyl0410阅读 652评论 1 2
  • Java 8自Java 5(发行于2004)以来最具革命性的版本。Java 8 为Java语言、编译器、类库、开发...
    谁在烽烟彼岸阅读 907评论 0 4
  • 本文结合Java8,重新整理了接口和抽象类的区别,以及如何理解接口的设计目的。并且分析了Java8的接口新特性:d...
    _Zy阅读 2,748评论 0 7
  • 目录结构 介绍 Java语言的新特性2.1 Lambdas表达式与Functional接口2.2 接口的默认与静态...
    夜风月圆阅读 498评论 0 2
  • 我想我必须要面对了,我不能让母亲对我失望。 家长会以后,我和母亲回到家里。我看到母亲很失落,但母亲什么也...
    2017々阅读 525评论 8 6