编译器如何进行信息隐藏和封装?
How do compilers perform information hiding and encapsulation?
当我创建一个Java class定义时,我可以使用private
、public
、protected
和其他关键字来控制成员和方法被访问:
public class Bowel{
private Movement privatePoop = new Movement(1);
public Movement publicPoop = new Movement(2);
...
}
编译器在为 privatePoop
和 publicPoop
方法和成员创建字节码时有何不同?如果有人从外部尝试访问 privatePoop
,它如何 know/signify 到他们不应该能够访问的 JVM?
基本上编译的classes和成员被标记为public、private等。这是纯粹的语法保护:编译器不会编译从外部访问私有成员封闭 class。您可以在运行时通过 reflection 绕过所有这些。
当我创建一个Java class定义时,我可以使用private
、public
、protected
和其他关键字来控制成员和方法被访问:
public class Bowel{
private Movement privatePoop = new Movement(1);
public Movement publicPoop = new Movement(2);
...
}
编译器在为 privatePoop
和 publicPoop
方法和成员创建字节码时有何不同?如果有人从外部尝试访问 privatePoop
,它如何 know/signify 到他们不应该能够访问的 JVM?
基本上编译的classes和成员被标记为public、private等。这是纯粹的语法保护:编译器不会编译从外部访问私有成员封闭 class。您可以在运行时通过 reflection 绕过所有这些。