如果您没有为接口指定访问修饰符,那么该接口是否会具有默认访问权限?

3
我正在阅读Kathy Sierra和Bert Bates编写的《SCJP》一书,第21页上说,“如果想要接口公开而不是默认访问,则需要使用public修饰符”。这是真的吗?如果是的话,那么接口方法(它们总是public)只有在实现类和接口位于同一包中时才可访问。因为这就是默认访问修饰符的含义。我对此有些困惑。

4
如果您希望接口具有公共访问权限,那么您需要明确说明。然而,接口的各个成员始终是公共的。 - cHao
例如,如果接口本身具有默认访问权限,那么它的方法如何在其实现包之外使用呢?在这种情况下,实现类甚至无法看到该接口...所以我不明白为什么它的方法会是公共的,如果它具有默认访问权限 :-( - user1142130
接口将对包中的任何其他类可见。 包中想要实现接口的任何类都会声明相关方法为公开的。 外部无法使用接口--默认访问实际上是“供内部使用”。但是,他们可以调用它定义的方法,因为它们在类上是公共的。 当然,假设该类是公共的。 - cHao
2个回答

2
“如果您没有为接口指定访问修饰符,那么该接口将具有默认访问权限”,这是真的吗? 是的,这是正确的。如果未指定访问修饰符,则Java类中的类型/字段/方法具有包级别访问权限。在接口类型中定义的成员默认为public。请阅读教程- 控制类成员的访问权限。”

1

这里的interface本身是包可见的,但是方法默认始终是公共的

interface Foo
{
    void bar(); // this is always public and nothing else
}

这里的 interfacepublic 的,同时也有方法。

public interface Foo
{
    void bar(); // this is always public and nothing else
}

你可以声明 public void bar(); 或者 void bar(); 它们的意思是一样的,个人而言,我总是加上 public,因为显式总是比隐式更好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接