接口实现的差异

时间:2014-03-13 17:37:02

标签: java interface

我可能有一个简单的问题 这里有两个代码片段来显示我的意思:

示例1:

public interface SomeInterface{
  public void someMethod(...);
}

示例2:

public interface AnotherInterface{
  void anotherMethod(...);
}

因此,示例1对我来说完全清楚,但是示例2不是。

事实上,这两个例子之间是否存在期望public - 修饰符的差异?

一方面,我发现Interface s中的方法是隐式的public,但另一方面我发现在Interface中声明的方法是" package-public& #34; (我现在不正确,如果这是正确的描述) - 说这些与Interface在同一个包中的所有类都可见。
现在我完全糊涂了..所以有人可以解释一下我的权利吗?

非常感谢。

3 个答案:

答案 0 :(得分:1)

所有界面方法都是公共摘要,所有界面字段都是公共静态最终

所以上面的例子没有区别。

答案 1 :(得分:1)

声明它public是多余的。特别是JLS 9.4州:

  

接口主体中的每个方法声明都是隐式公共的(第6.6节)。

     

接口主体中的每个方法声明都是隐式抽象的,因此它的主体总是用分号表示,而不是块。

     

允许但不鼓励作为样式,为接口中声明的方法冗余地指定公共和/或抽象修饰符。

答案 2 :(得分:1)

界面中的所有方法都是公共的,并且可以在任何地方实现类。但是如果接口本身是包本地的(没有修饰符 - 默认值),那么这些方法只对同一个包中的类/接口可见。但该方法仍然必须在实施类

中公开

在上面的代码中,没有区别。但如果是的话:

interface AnotherInterface{ // Note no modifier - default modifier applied
    void anotherMethod(...);
}

在这种情况下,界面只在同一个包内可见。

注意:接口本身可以是包私有的,而不是其中的方法。您可以定义一个只能在其定义的包中使用(通过名称)的接口,但其方法与所有接口方法一样公开。如果类实现了该接口,则它定义的方法必须是公共的。这里的关键是它是在包外面看不到的接口类型,而不是方法。