前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >你不知道的Interface的骚操作

你不知道的Interface的骚操作

作者头像
PhoenixZheng
发布2018-08-07 16:38:57
3840
发布2018-08-07 16:38:57
举报

有一天,小A的朋友小呼面试回来,愁眉不展。

"难道面试不顺利?"小A心想。于是问小呼都问了什么。小呼说,面试官问了个奇怪的问题,

"Java的接口能不能定义静态方法"

小呼当时就内心一喜,这不是明摆着的问题嘛!

"当然不能,从来没听说过可以这么操作"

面试官微微一笑,

"好的回去等通知吧"

"难道我记错了?"小呼说。

"其实啊,你听我说…",于是小A跟小呼解释了起来

Java Interface的方法

总所周知,Java的Interface不能有静态方法,因为接口是用来规定一种约束,所以它自己本身不能有任何实现。不理解这点的同学可以查看昨天对于Java接口静态变量的解释。

但是!在Java8中,接口新增了特性,允许用户定义静态方法!

那么接口静态方法怎么用,又在什么时候用呢?

接口静态方法的作用

直到Java8之前,接口都不能定义静态方法。我们举个例子,产品提了个需求要做个计算器,只有加减两个方法。

public interface BaseCalculator {
  public int add(int a, int b);
  public int subtract(int a, int b);
}

我们先定义了个约束或者叫规范,这个计算器只提供加和减两个功能。然后我们实现了个类

public class SimpleCalculator implements BaseCalculator {

    @Override
    public int add(int a, int b) {
      //do add
    }

    @Override
    public int subtract(int a, int b) {
      //do substract
    }
}

产品上线后,获得了小学生的一致好评!

需求变更

产品说,我们来改需求吧。加个功能,求平方。

无奈的我们就加了个接口square

public interface BaseCalculator {
  public int add(int a, int b);
  public int subtract(int a, int b);
  public int square(int a);
}

可是此时就要修改实现类SimpleCalculator了。这种场景经常发生,代码量小的时候还好,但是当实现这个接口的类非常多的时候,没个文件都要去修改,新增一个接口,就很蛋疼了。而且!有些类根本不需要这个接口,咋办呀?

Java8提供了这种功能,可以定义个default方法作为默认实现,同时,接口也可以定义静态方法来给调用者使用了。

public interface BaseCalculator {
  public static void baseMethod() {
    System.out.println("static method of interface");
  }
  public int add(int a, int b);
  public int subtract(int a, int b);
  default int square(int a) {
    return a * a;
  }
}

这样之前的实现类SimpleCalculator就不需要再去修改了,而我们只需要在新的实现类里按我们的需要来重写default方法就行了。

总结

Java8提供了接口的两个新特性,静态方法和默认方法。 对于静态方法的调用跟接口的静态变量调用一样,都是以接口进行的。 对于默认方法,实现类可以根据需要来重写方法的实现。 对于面向接口编程来说,非常有用。可以避免对接口的修改导致大范围的而且是无必要的代码调整。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-20,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Android每日一讲 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java Interface的方法
  • 接口静态方法的作用
  • 需求变更
  • 总结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档