【问题标题】:Java interface asks for method bodyJava 接口请求方法体
【发布时间】:2018-05-24 08:33:07
【问题描述】:

我已经写了这个java代码

public interface Sorter {

  public static <T extends Comparable<T>> void sort(T[] array);

}

编译器会向我抛出这个错误:

Sorter.java:7: error: missing method body, or declare abstract
  public static <T extends Comparable<T>> void sort(T[] array);
                                               ^
1 error

通过在方法声明的末尾将分号更改为“{}”,一切似乎都很好。 但这不是定义接口的方式吗?毕竟,身体有什么意义。

【问题讨论】:

  • 静态接口方法不是抽象的,必须有实现
  • 你有一个静态方法。接口中的静态方法(可能从 Java8 开始)需要在接口本身中实现,因为它们不能被覆盖。
  • @ErnestKiwele 嘿,谢谢。有什么具体原因吗?
  • 哦,好的。谢谢大家
  • @Ben 反过来说:静态方法不能被覆盖,所以它不能是抽象的。

标签: java methods interface


【解决方案1】:

static 方法不能被子类覆盖/实现。顾名思义,它是静态的。
因此,在接口中定义 static 抽象方法是没有意义的(并且在编译时是非法的),因为没有子类可以实现/覆盖它。
在您的接口中定义 static 方法的实现(从 Java 8 开始可能)或使其成为子类可以实现的实例方法。

【讨论】:

    【解决方案2】:

    接口中不能有静态方法。静态方法不依赖于实例,因此可以直接从类文件中执行。

    更多详情请见

    Why can't I declare static methods in an interface?

    虽然您可以使用 Java 8 定义默认方法和静态方法

    【讨论】:

      猜你喜欢
      • 2017-09-25
      • 2012-05-22
      • 2014-01-26
      • 1970-01-01
      • 1970-01-01
      • 2019-08-24
      • 1970-01-01
      • 2016-09-22
      • 1970-01-01
      相关资源
      最近更新 更多