Java中的字段默认是私有的吗?

Mad*_*nyo 0 java

为什么我看到那么多的例子在字段前键入private,而默认情况下afaik字段是私有的.

private int number;
int number;
//Both of these are the same afaik. Yet, in a ton of examples private gets fully written, why?
Run Code Online (Sandbox Code Playgroud)

Aug*_*ust 18

不,他们不一样.缺少访问修饰符默认为package-private.

请参阅:http://docs.oracle.com/javase/tutorial/java/javaOO/accesscontrol.html

Modifier    Class   Package Subclass    World
public        Y        Y       Y         Y 
protected     Y        Y       Y         N
no modifier   Y        Y       N         N
private       Y        N       N         N
Run Code Online (Sandbox Code Playgroud)

此规则的例外是interface方法和字段签名是public在省略访问修饰符时:http://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

  • @Yoda不,不是. (6认同)
  • @Yoda不是.如果子类是不同的包,则无法从子类访问package-private(缺省).虽然受到保护. (5认同)
  • @August你可以修改你的答案,提到`interface`定义是你的表的一个例外.在`interface`中,没有访问修饰符的方法和静态字段是隐式的`public`. (3认同)

小智 5

默认情况下不是私有的,是“仅包”(没有关键字)。

同一包中的所有类都会看到该字段。