我是靠谱客的博主 阳光雪碧,最近开发中收集的这篇文章主要介绍Java 8 之默认方法(Default Methods),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

Oracle官网是这样介绍默认方法的,使用默认方法,可以达到往接口里面增加新的功能,而且保持与老版本代码兼容,也就是原来的实现类可以不需要被动修改。所以,默认方法位置是在接口里面;默认方法具有实现,不会强制具体类来现。Java 8要充分利用Lambda,需要增强大量的类库,但是又希望做到兼容性,只能用默认方法这个大招。

默认方法

默认方法与普通的接口方法相比,最前面增加default关键字,参数列表之后接大括号,实现该方法,再后面没有分号。

默认方法的例子

public interface Player {
String getName();
default boolean isMale() {
return true;
}
}

扩展包含默认方法的接口

当一个接口扩展另外一个包含默认方法的接口的时候,有以下3种处理方式。

  • 完全无视默认方法
    直接继承了上级接口的默认方法
  • 重新申明默认方法
    重新把默认方法申明为抽象方法(无实现,具体子类必需再次实现该方法)
  • 重新实现默认方法
    重写了默认方法的实现,依然是一个默认方法。

抽象类实现包含默认方法的接口和上述描述一样。具体类实现包含默认方法的接口的,没有第二条。

接口静态方法

Java 8 接口也可以有静态方法了。静态方法,从职责定位来讲,就是个工具方法。

public interface Player {
String getName();
public static void printContact(Contact contact) {
// TODO print contact for play in the following
}
}

接口与抽象类

记得在什么地方看到过,Java之父说,再给他一次设计Java的机会,Java里就不会有抽象类。面试的时候也有很多时候问接口与抽象类的区别。

总的来说抽象类和接口越来越接近了,是接口向抽象类靠近,剥夺抽象类的生存空间。
默认方法和接口静态方法都是重型武器。

  • 与抽象类相比,接口不能搞定的

    • 抽象类能够定义非 static final 的属性(field)
      ,而接口不能。接口的属性都是static final的。
    • 抽象类能够定义非public方法,而接口不能。接口的方法都是public的。
  • 与接口相比,抽象类不能搞定的

    • 接口可以多继承(实现),而抽象类不能。抽象类只能单继承。

结语

虽然默认方法在JDK里面主要用于扩展已有类库,不过新的项目默认方法依然很有价值。
曾今的写接口,写抽象类,写具体类这个流程,某些时候可以省去中间的这个步骤。而且接口里面也可以存放一些工具方法了(接口静态方法)。不过,记得接口的方法都是public的,如果想要严格控制访问,那么还得使用抽象类。

最后

以上就是阳光雪碧为你收集整理的Java 8 之默认方法(Default Methods)的全部内容,希望文章能够帮你解决Java 8 之默认方法(Default Methods)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部