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
相关产品推荐
相关产品推荐

