为什么不禁止访问私有字段?

cit*_*nas 4 java

对于我在大学的学习,我不得不做一些丑陋的java基础知识,比如没有封装的工作,同一类的主要方法等等.(我不想在java风格指南上开一个讨论,我只想澄清一下,我不会在大学之外写这样的东西)

我偶然发现了一个我无法向自己解释的行为:

public class Person {
  // fields
  private int age;

  public static void main(String[] args) {
    Person foo1 = new Person();
    foo1.age = 40;
    System.out.println(foo1.age);
  }
}
Run Code Online (Sandbox Code Playgroud)

为什么这段代码编译运行没有错误?我怎么可能访问私人领域?由于主要方法在同一个类中而导致奇怪的行为?

cle*_*tus 17

因为静态方法main是类的成员,Person因此可以访问任何私有字段或方法Person.

你在担心什么?有人会写一个类,然后能够从他们自己的类访问这些方法?

如果您要担心任何事情,请担心您可以使用反射访问任何类中的私有字段,但即使这对于许多有用的事情都是必要的.

  • @citronas:我不相信那是Nate所说的.我相信他说C#还允许类中的静态方法访问该类的私有成员(如果给它一个实例)(就像Java一样). (3认同)

aku*_*uhn 15

是的 - 在Java中,private是类私有而非私有实例.

许多其他语言使用私有实例,例如Ruby和Smalltalk.