Java中的接口可以只有一个公共修饰符.为什么剩下的不被允许?

Bha*_*esh 2 java modifier

可能重复:
在接口中受保护

以下代码片段显示Java中的接口只能有一个公共修饰符.在接口中不允许使用其他修饰符(私有和受保护的),既不使用字段也不允许使用任何方法.显然在修饰符中,private在接口中没有任何意义,但是应该允许在接口中使用protected,因为它可以通过它的实现类来合并.

interface Demo
{
    private final static int a=10; //Will not be compiled.
    protected final static int b=20; //Will not be compiled.
    public final static int x=0;   //ok

    abstract public void showSum();
}
Run Code Online (Sandbox Code Playgroud)

允许抽象类将所有修饰符设置为private,public和protected.我的问题是只有一个受保护的修饰符是不是多少有些似乎被允许在一个界面中允许的.为什么?

Ern*_*ill 6

显然,最好的答案是"因为这是他们定义它的方式." 我认为在最初定义Java时所做的决策背后的原理并不太令人满意; 很久以前,现在,使用该语言获得的经验表明,许多初步决定都存在缺陷.

在这种情况下,接口旨在用作与对象通信的公共协议,因此,决定所有成员必须是公共的.这可能不是最好或最有用的定义,但它是我们拥有的定义,我们必须忍受它.


Azo*_*ous 6

interface应以这样的方式声明an中的所有方法和字段,以便可以从任何地方调用它们.不仅来自一个子类.

只有public修饰符可以实现这一点.

但是,应该避免在界面中有一个字段.如果可能的话.