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

Java疑问:为何能访问类中private修饰的成员变量?

为什么用private修饰的成员变量在同一个类里能直接访问?

嘿,这个问题其实是Java访问修饰符里很容易踩的小坑,我来给你讲明白~

你之所以产生困惑,是因为对private修饰符的访问范围理解有点偏差:

  • private的核心限制是:只有当前类的内部代码才能访问,而不是“必须通过getter/setter才能访问”
  • getter/setter的作用是给类外部的代码提供访问入口,当代码在类内部时,完全不需要这一层“中间商”

看你的代码示例:

public class Test { 
    private int radius = 3; 
    private int age; 
    public static void main(String[] args) { 
        Test a = new Test(); 
        System.out.println(a.radius); 
        System.out.println(a.age); 
    } 
}

这里的main方法是Test类自己的静态方法,属于同一个类的内部代码,就像你在自己家里拿自己的东西一样,完全不受private的限制。

举个反例帮你理解:如果把main方法放到另一个类里,比如:

public class AnotherClass {
    public static void main(String[] args) {
        Test a = new Test();
        System.out.println(a.radius); // 这里会直接编译报错!因为属于类外部访问private成员
    }
}

这时候你才需要给Test类添加getter方法,比如:

public class Test {
    private int radius = 3;
    // 给外部提供访问入口
    public int getRadius() {
        return radius;
    }
}

这样AnotherClass里就能通过a.getRadius()拿到radius的值了。

总结一下:

  • private是用来隔离类外部的访问,类内部的代码(不管是实例方法还是静态方法)都能直接访问private成员
  • getter/setter是类对外暴露成员的方式,和类内部的访问权限无关

内容的提问来源于stack exchange,提问作者TheWurstToplaner

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 07:42:53