Java 8:接口成员的可访问性

Vis*_*ant 4 java jls java-8

无障碍

Java 8说:

缺少访问修饰符的接口的所有成员都是隐式公开的

Java 7说:

接口的所有成员都是隐式公共的.

当我尝试以下代码时:

public interface Test {
    protected int i = 10;
}
Run Code Online (Sandbox Code Playgroud)

编译,我得到了

Test.java:3: error: modifier protected not allowed here
        protected int i = 10;
                      ^

Java版本: Java(TM) SE Runtime Environment (build 1.8.0-b129)

但在上面的Interface成员声明我不缺乏访问修饰符,那么为什么我收到此错误.

Sot*_*lis 7

你引用的是关于确定名称可访问性的JLS部分

缺少访问修饰符的接口的所有成员都是隐式公开的

你真正需要寻找的是在部分接口字段声明其中规定

ConstantDeclaration:
    {ConstantModifier} UnannType VariableDeclaratorList ;
ConstantModifier:
    Annotation public 
    static final
Run Code Online (Sandbox Code Playgroud)

在接口的身体的每一个字段声明是含蓄 public,staticfinal.允许为这些字段冗余地指定任何或所有这些修饰符.

所以这些是你可以使用的修饰符.上面引用的部分是指当您不使用任何访问修饰符时,在这种情况下它将是隐式的public.