2011-03-24 41 views
38

默认情况下,界面中的所有方法是否具有公开可见性模式?方法界面中的可视性

+0

如果您有时间,您可能需要通过一线团队阅读SCJP for java 6准备指南。那里有很多信息。接口方法默认是抽象的和公共的。 – zawhtut 2011-03-24 12:43:09

回答

69

接口中的所有方法默认为public

Java Language Specification 6.6.1其中规定

接口的所有成员都是 隐含public

+23

它们是'public'默认**和**'public'是唯一允许的值。 – 2011-03-24 11:39:56

+0

+1参考JLS(通常有引用) – 2011-07-13 16:30:42

+4

,但* rodion *(***本地/私人接口***本身)的**答案/“解决方法”**对于此处的重要内容非常重要: http://stackoverflow.com/a/5420362/1915920 – 2015-01-21 10:30:32

3

是的,一个接口的所有方法都是公开的,而且不能有任何其他访问修饰符(即默认的公共访问修饰符是唯一有效的访问修饰符)

14

所有的接口方法public abstract,所有的接口字段public static final ...

看到here

+4

+1:所有嵌套类都是'public static' – 2011-03-24 11:49:31

+0

最好不要在接口中有任何状态(实例变量),尽管编译器会让你定义领域。接口应该定义能力,或者对象可以做什么。 – hotshot309 2012-12-04 19:31:38

10

只是在这里添加其他答案:所有方法都是公共的,但是,如果接口本身是封装本地的,那么有效所有的方法也是封装本地的。

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

public interface P{ 
    void iAmPublic(); 
} 

interface L extends P{ 
    void iAmPackageLocal(); 
} 

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

以同样的方式,您可以在其他类中嵌套接口,以实现更紧密的方法可见性。

+1

你的方法'iAmPackageLocal'不会被封装为私有的。请参阅http://stackoverflow.com/a/4801672/16209 – 2011-12-30 15:02:45

+2

正如我在第一句话中所说的那样,这个方法*有效* package-private(这里注意单词**有效**),因为方法不存在而不需要声明接口,如同一篇文章中所述,它可以是封装私有的。由于您只能从软件包外部访问'P#iAmPublic()',但可以从软件包内部访问这两种方法,因此您可以获得所需的效果。假设你在程序包内部有一个带有public L getL();方法的API,然后尝试从包的外部调用'getL()。iAmPackageLocal()',你会得到一个编译器错误。 – rodion 2012-01-08 11:41:49

+0

'公共类PseudoPrivate implements L' – 2012-01-10 13:30:09