You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何第二段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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:57:20