2

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

以下代码片段显示 Java 中的接口只能有一个修饰符,即public。在接口中不允许使用其他修饰符(私有和受保护),无论是字段还是任何方法。显然,在修饰符中,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();
}

而一个抽象类被允许拥有所有的修饰符 private、public 和 protected。我的问题只是在似乎允许的界面中不允许使用受保护的修饰符。为什么?

4

3 回答 3

7

显然,最好的答案是“因为他们是这么定义的”。我不认为我会在最初定义 Java 时做出决定的理由过于认真。现在是很久以前的事了,使用该语言获得的经验表明,许多最初的决定是有缺陷的。

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

于 2011-11-06T13:51:44.150 回答
7

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

只有public修饰符才能做到这一点。

但是,应避免在接口中有字段。如果可能的话。

于 2011-11-06T13:51:48.067 回答
2

抽象类提供了一些子类继承的实现。

接口只定义了一个外部 API,不提供任何实现。接口背后的整个想法是实现完全留给实现类。

于 2011-11-06T13:50:37.003 回答