Java 8中接口方法的隐式说明符/修饰符是什么?

Sus*_*lam 1 java intellij-idea java-8

我理解接口方法是隐含的public.Java Docs教程

界面中的所有abstract,defaultstatic方法都是隐式的public,因此您可以省略public修饰符.

在抽象,静态和默认情况下,在Java 8中隐式声明了哪些修饰符.

我认为abstractJava 8 default在接口中引入了方法时没有隐式声明,但我仍然在Intellij IDEA中收到警告.

abstract对于接口方法,修饰符' '是冗余的.

public interface TestInterface {
    abstract int print();  // abstract redundant ?.
    int print2(); //legal.but public or public abstract ?.
}
Run Code Online (Sandbox Code Playgroud)

Mak*_*oto 5

语言规范 -特别是第9.4节,规定abstractpublic是隐含的.

接口主体中的每个方法声明都是隐式公共的(第6.6节).允许但不鼓励作为样式,在接口中冗余地指定方法声明的公共修饰符.

缺少默认修饰符或静态修饰符的接口方法是隐式抽象的,因此其主体由分号表示,而不是块.允许但不鼓励作为样式,为这种方法声明冗余地指定抽象修饰符.

这就是IntelliJ警告你的原因; 通过JLS,你正在做一些完全多余的事情.

作为奖励,接口中的字段是隐含的public static final:

接口主体中的每个字段声明都是隐式的public,static和final.允许为这些字段冗余地指定任何或所有这些修饰符.