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

时间:2014-09-28 16:31:02

标签: 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?

5 个答案:

答案 0 :(得分:17)

不,他们不一样。缺少访问修饰符默认为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

此规则的例外情况是,当省略访问修饰符时,interface方法和字段签名为publichttp://docs.oracle.com/javase/tutorial/java/IandI/interfaceDef.html

答案 1 :(得分:2)

默认情况下不是私有的,只是"仅打包" (没有关键词)。

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

答案 2 :(得分:2)

这不是一回事。在Java中未指定访问修饰符(在本例中为private)表示使用默认访问修饰符。即与您班级在同一个包裹上的任何东西都可以访问这些成员。

private访问修饰符意味着只有该特定类才能访问其成员。

这种情况发生的原因是一个类可以保护它的数据并避免意外的数据损坏。

有关详细信息,请参阅this

现在,如果要访问这些成员,则必须创建getter方法,例如:

public class foo{

   private int x = 5;

   public int getX(){ return x;}
}

同样,如果要更改成员值,可以创建setter方法:

 public int setX(int x){ this.x = x;}

答案 3 :(得分:1)

如果您没有为任何属性/方法指定任何修饰符,则它具有默认修饰符。 这意味着它只能在同一个类或包中访问。而私有修饰符限制在定义的类中访问的属性。

答案 4 :(得分:0)

上面的链接是有效的,您应该阅读它以查看哪个访问修饰符可以应用于类,结构,变量等.... 但是,在C#中没有像第二个引用那样可用的访问修饰符时,修饰符默认是私有的,而不是内部的。内部用于类和结构。

对于Java,包是可见的

e.g。

A类{}

相同

内部班级A {}