接口方法可以有主体吗?

我知道一个接口就像一个100%纯的抽象类。因此,它不能包含方法实现。但是,我看到了一个奇怪的代码。有人可以解释吗?

 interface Whoa {

public static void doStuff() {

System.out.println("This is not default implementation");

}

}

我的IDE是Intellij Idea 13.1。项目SDK是Java 7

<1.7.0_25>。IDE未显示任何编译器错误。但是,当我在命令行上编译代码时,我收到以下消息。

Whoa.java:2: error: modifier static not allowed here

public static void doStuff() {

^

回答:

在 中,除了默认方法外,您还可以在接口中定义静态方法。

  • 静态方法是与其定义的类相关联的方法,而不是与任何对象相关联的方法。该类的每个实例都共享其静态方法。

  • 这使您可以更轻松地在库中组织帮助程序方法。您可以将特定于接口的静态方法保留在同一接口中,而不是在单独的类中。

  • 以下示例定义了一个静态方法,该方法检索ZoneId与时区标识符相对应的对象;如果没有ZoneId与给定标识符对应的对象,它将使用系统默认时区。(因此,您可以简化方法getZonedDateTime

这是代码:

public interface TimeClient {

// ...

static public ZoneId getZoneId (String zoneString) {

try {

return ZoneId.of(zoneString);

} catch (DateTimeException e) {

System.err.println("Invalid time zone: " + zoneString +"; using default time zone instead.");

return ZoneId.systemDefault();

}

}

default public ZonedDateTime getZonedDateTime(String zoneString) {

return ZonedDateTime.of(getLocalDateTime(), getZoneId(zoneString));

}

}

回答:

  • 用于接口方法的Oracle文档

  • 有关Java 8中所有有趣的内容,请阅读有关Java 8的一切。

以上是 接口方法可以有主体吗? 的全部内容, 来源链接: utcz.com/qa/414482.html

回到顶部