Java中的默认访问说明是什么?

问题描述 投票:104回答:12

我刚开始读一本Java书籍,并感到奇怪;如果未指定,则哪个访问说明符是默认的?

java access-specifier
12个回答
113
投票

默认可见性被称为“ package-private”(尽管您不能显式使用它,这意味着可以从该类所属的同一包内部访问该字段。

如mdma所指出的,但对于接口成员而言并非如此,其默认值为“ public”。

请参见Java's Access Specifiers


2
投票
更新

Java 8


1
投票
[JAVA中有一个称为“ default”的访问修饰符,该修饰符仅允许在该程序包中直接创建该实体的实例。

-2
投票
首先,我要说一件事,在Java中没有诸如“访问说明符”这样的术语。我们应该将所有内容称为“修饰符”。众所周知,最终的,静态的,同步的,易变的....被称为修饰符,甚至公共,私有,受保护,默认,抽象也应称为修饰符。默认是这样的修饰符,其中不存在物理存在但没有放置修饰符,则应将其视为默认修饰符。

79
投票

默认说明符取决于上下文。

对于类和接口声明,默认为包私有。这介于受保护和私有之间,仅允许访问同一程序包中的类。 (受保护就是这样,但也允许访问包外部的子类。)

class MyClass   // package private
{
   int field;    // package private field

   void calc() {  // package private method

   }
}

对于接口成员(字段和方法),默认访问权限为public。但是请注意,接口声明本身默认为私有包。

interface MyInterface  // package private
{
   int field1;         // static final public

   void method1();     // public abstract
}

如果我们有声明的话

public interface MyInterface2 extends MyInterface
{

}

然后,使用MyInterface2的类可以从超级接口查看field1和method1,因为它们是公共的,即使它们看不到MyInterface本身的声明。


15
投票

如果没有给出访问说明符,则是对类和类成员的包级访问(对此没有明确的说明符)。接口方法是隐式公共的。


9
投票

默认可见性(无关键字)为package,这意味着它可用于同一包中的每个类。

有趣的旁注是,[[protected不仅将可见性限于子类,而且还限制了同一包中的其他类]]


8
投票
取决于事物是什么。

5
投票

default


3
投票
有关更多详细信息,请参见here。默认值不是私有/公共/受保护的,而是完全不同的访问规范。它没有得到广泛使用,我希望在访问定义中更加具体。

3
投票
默认访问说明是

package


3
投票
[这里是对Java的创建者James Gosling的采访中有关程序包级别可见性的引用:
© www.soinside.com 2019 - 2024. All rights reserved.