编译器如何进行信息隐藏和封装?

How do compilers perform information hiding and encapsulation?

当我创建一个Java class定义时,我可以使用privatepublicprotected和其他关键字来控制成员和方法被访问:

public class Bowel{
  private Movement privatePoop = new Movement(1);
  public Movement publicPoop = new Movement(2);

  ...
}

编译器在为 privatePooppublicPoop 方法和成员创建字节码时有何不同?如果有人从外部尝试访问 privatePoop,它如何 know/signify 到他们不应该能够访问的 JVM?

基本上编译的classes和成员被标记为public、private等。这是纯粹的语法保护:编译器不会编译从外部访问私有成员封闭 class。您可以在运行时通过 reflection 绕过所有这些。