接口方法可以有主体吗?
我知道一个接口就像一个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