Java 程序员都知道要面向接口编程,那 Java​ 中的接口除了界说接口办法之外还能怎样用你知道吗?今日团长就来带大家看一下 Java 中间的接口还能够有哪些用法。

根本特性

咱们先看一下接口的根本特性

  • 接口的界说需求运用关键字interface;
  • 接口界说的一切办法默许都是public abstract;
  • 当一个详细的class​ 去完成一个interface​时,需求运用implements 关键字;
  • 接口之间是能够多承继,而类是只能单承继的;

如下所示,咱们界说一个接口;

package com.example.demo.inter;
import java.io.Serializable;
import java.util.RandomAccess;
public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
}

默许办法

在 JDK 8​ 之前接口是不支持默许办法的,在 JDK 8​ 之后接口支持默许办法,默许办法采用关键词 default 声明。

public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
  default String sayHello3() {
    return "hello3";
  }
}

默许办法跟笼统办法不相同,接口中界说的笼统办法,当接口被其他类完成的时分都需求悉数完成,可是默许办法是不需求被完成就能够直接运用的,类似于直接调用父类的办法相同,所以在许多时分,咱们现已承继了一个类,还想有一个能用可是不想每个子类都完成的办法的时分,就能够考虑添加一个接口的默许办法来运用,简单来说就是完成类能够不覆写 default 办法。

default办法存在的目的是,在咱们现已完善的项目中,假如咱们直接给一个接口添加一个办法,在没有默许办法的时分就需求给一切的完成类都完成对应的办法,可是这个办法又不一定是每个完成类都需求的,所以这个时分默许办法就很好的解决了这个问题,咱们只需求添加一个默许办法,然后在需求运用的完成类中进行完成或许运用就能够了,其他的完成类不需求改动任何的代码。

符号

接口还有一个很常见的功用那就是符号功用,这么说或许你没有印象,可是说到序列化接口 java.io.Serializable;​ 你肯定知道,咱们经常在对应的 POJO 中都会完成这个序列化接口,而这个序列化的接口假如看过源码的小伙伴肯定知道里面是没有内容的。

Java 中间的接口还可以这样用,你知道吗?

同样的功用除了序列化的接口,类似的空间接口还有许多,比方 java.util.RandomAccess​ 也是空间接口,之前阿粉也写过关于 RandomAccess​ 这个接口的用途,感兴趣的能够再去看看。RandomAccess 明明是个空接口,能有什么用呢?

Java 中间的接口还可以这样用,你知道吗?

经过源码咱们能够知道 RandomAccess 是用来标识子类是否完成了该接口,假如完成了则走完成了的逻辑,没有完成就走没有完成的逻辑,所以咱们在日常开发中也能够利用这个特性,当咱们有不同的子类需求依据情况进行不同的完成逻辑的时分就能够采用界说一个空接口来符号一下,方便后面的处理。

静态办法

跟默许办法相同,JDK 8 还支持在接口中添加静态办法,虽然说在接口中界说静态办法的做法不常见,可是当需求运用的时分也是能够支持的,防止在创立一个独自的工具类,跟在类中界说的静态办法相同,咱们能够直接经过接口称号引用静态办法,当然静态变量也是能够的,运用办法相同。

public interface ITest extends Serializable, RandomAccess {
  public abstract String sayHello();
  String sayHello2();
  default String sayHello3() {
    System.out.println(sayHello4());
    return "hello3";
  }
  public static String sayHello4() {
    return "hello4";
  }
}

私有办法

大家有没有注意到,上面不管是默许办法还是静态办法其实都是 public​ 公开的,能够让完成类或许其他类直接运用,那有没有或许在接口中界说一个私有办法呢?在 JDK 9​ 之前是不能够的,JDK 9 却支持了,如下所示

private void privateMethod() {
    System.out.println("private私有办法被调用");
  }
  private static void privateStaticMethod() {
    System.out.println("private私有静态办法被调用");
  }

从官方的文档中咱们能够找到下面的描述,在 JDK 9 中接口支持私有办法,首要用于不同的非笼统办法中共享代码。

Java 中间的接口还可以这样用,你知道吗?

咱们能够看到在 JDK 9 这样写是能够的

Java 中间的接口还可以这样用,你知道吗?

可是在 JDK8​ 就不行了,是无法编译经过的,会提示不允许运用 private 修饰符。

Java 中间的接口还可以这样用,你知道吗?

总结

今日团长给大家总结了一个接口的运用办法,后面在日常的开发中咱们不单单只是在接口中界说笼统办法,也能够依据需求添加默许办法或许私有办法,以及在需求用到符号的时分也能够经过界说一个空接口来完成,怎样样是不是很棒,感觉动起来吧