方法界面中的可见性

dev*_*per 42 java

接口中的所有方法都默认具有公共可见性模式吗?

Jef*_*ter 75

界面中的所有方法都默认为public.

Java语言规范6.6.1其中规定

接口的所有成员都是隐式的public.

  • 它们是`public`默认**,**`public`是唯一允许的值. (24认同)
  • 但*rodion*(***本地/私人界面***本身)的**回答/"解决方法"**很重要,请看:http://stackoverflow.com/a/5420362/1915920 (4认同)

pgr*_*ras 14

所有接口方法都是ARE public abstract,所有接口字段都是public static final......

看到这里.

  • +1:所有嵌套类都是`public static` (4认同)

rod*_*ion 10

只需添加到其他的答案在这里:所有的方法都是公开的,但是,如果接口本身是包本地,然后有效的方法都还包本地.

因此,您可以通过使包本地接口扩展为公共接口来混合使用公共方法和包本地方法.

public interface P{
  void iAmPublic();
}

interface L extends P{
  void iAmPackageLocal();
}
Run Code Online (Sandbox Code Playgroud)

这里L实际上有一个公共方法和一个包本地方法.来自包外的客户端只会看到iAmPublic(),而来自包内的客户端将看到这两种方法.

以同样的方式,您可以将接口嵌套在其他类中,以实现更严格的方法可见性.

  • 正如我在第一句中所述,该方法是*有效*包私有(注意这里有效**这个词),因为如果没有它们的声明接口,方法就不能存在,如同一篇文章中所述,它可以是包私有的.因为您只能从包外部访问`P#iAmPublic()`,但是可以从包内部访问这两种方法,您将获得所需的效果.假设你在包中有一个带有`public L getL();`的方法的API,然后尝试从包外面调用`getL().iAmPackageLocal()`,你将得到编译器错误. (2认同)