我可能有一个简单的问题 这里有两个代码片段来显示我的意思:
示例1:
public interface SomeInterface{
public void someMethod(...);
}
示例2:
public interface AnotherInterface{
void anotherMethod(...);
}
因此,示例1对我来说完全清楚,但是示例2不是。
事实上,这两个例子之间是否存在期望public
- 修饰符的差异?
一方面,我发现Interface
s中的方法是隐式的public
,但另一方面我发现在Interface
中声明的方法是" package-public& #34; (我现在不正确,如果这是正确的描述) - 说这些与Interface
在同一个包中的所有类都可见。
现在我完全糊涂了..所以有人可以解释一下我的权利吗?
非常感谢。
答案 0 :(得分:1)
所有界面方法都是公共摘要,所有界面字段都是公共静态最终。
所以上面的例子没有区别。
答案 1 :(得分:1)
声明它public
是多余的。特别是JLS 9.4州:
接口主体中的每个方法声明都是隐式公共的(第6.6节)。
接口主体中的每个方法声明都是隐式抽象的,因此它的主体总是用分号表示,而不是块。
允许但不鼓励作为样式,为接口中声明的方法冗余地指定公共和/或抽象修饰符。
答案 2 :(得分:1)
界面中的所有方法都是公共的,并且可以在任何地方实现类。但是如果接口本身是包本地的(没有修饰符 - 默认值),那么这些方法只对同一个包中的类/接口可见。但该方法仍然必须在实施类
中公开在上面的代码中,没有区别。但如果是的话:
interface AnotherInterface{ // Note no modifier - default modifier applied
void anotherMethod(...);
}
在这种情况下,界面只在同一个包内可见。
注意:接口本身可以是包私有的,而不是其中的方法。您可以定义一个只能在其定义的包中使用(通过名称)的接口,但其方法与所有接口方法一样公开。如果类实现了该接口,则它定义的方法必须是公共的。这里的关键是它是在包外面看不到的接口类型,而不是方法。