为何第二段Java代码无法访问private成员方法与变量?
为什么跨类访问private成员会编译报错?
嘿,这问题问得特别到位,刚好能帮你把Java中private访问权限的核心规则掰明白~
先搞懂private的核心规则
Java里用private修饰的成员(变量、方法),只有定义它的那个类本身的代码,才能直接访问。这个规则非常严格:
- 不管是不是同一个包
- 不管是不是子类
- 哪怕是其他类创建了这个类的对象,也不能直接碰它的
private成员
分析你的两段代码
第一段:同一个类内访问,完全合法
你在PublicClassPrivateMethodAndVariableAccess的main方法里访问自身的private成员a和show(),这完全符合规则——因为main方法本身就是这个类的一部分啊!哪怕main是静态方法,只要在同一个类的代码范围内,就能访问这个类的所有private成员(实例成员记得先创建对象就行)。
第二段:跨类访问,违反规则
NoModifierClassPrivateMethodAndVariableAccess的main方法属于另一个独立的类,而Testclass的private成员是它自己的“私有财产”,Java的访问控制机制直接禁止了其他类直接访问这些私有成员,所以编译器会直接报错。
题外话:如果非要跨类访问怎么办?
如果确实有需求要访问其他类的private成员,可以用Java的反射机制,但这属于非常规操作,会破坏类的封装性,一般开发中不推荐这么做,除非是框架开发、调试这类特殊场景。
内容的提问来源于stack exchange,提问作者abu
相关产品推荐
相关产品推荐

