【问题标题】:How do compilers perform information hiding and encapsulation?编译器如何执行信息隐藏和封装?
【发布时间】:2018-10-24 11:43:35
【问题描述】:

创建Java类定义时,可以使用privatepublicprotected等关键字来控制成员和方法的访问方式:

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

  ...
}

编译器在为privatePooppublicPoop 方法和成员创建字节码时有何不同?如果有人在外部尝试访问privatePoop,它如何知道/向 JVM 表明他们不应该这样做?

【问题讨论】:

    标签: java encapsulation information-hiding


    【解决方案1】:

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

    【讨论】:

    • 只要你有绕过的权限。
    • 确实,您可以使用SecurityManager 防止反射。但是,如果您要编写自己的编译器...
    猜你喜欢
    • 2012-12-04
    • 2017-02-05
    • 2016-07-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 2020-09-08
    相关资源
    最近更新 更多