在 Java 中,private(私有访问权限) 是最严格的访问修饰符,用于控制类成员的访问范围。
private 修饰的成员(变量、方法、构造方法)只能在本类中访问,其他任何类都不能直接访问。
public class Person {
private String name;
private int age;
private void sayHello() {
System.out.println("Hello");
}
}
✅ 在 Person 类内部可以访问
❌ 在其他类中 不能直接访问
public class Person {
private String name;
public void setName(String name) {
this.name = name; // ✅ 允许
}
}
public class Test {
public static void main(String[] args) {
Person p = new Person();
// p.name = "Tom"; // ❌ 编译错误
}
}
public class Person {
private String name;
private int age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
✅ 通过 getter / setter 访问
✅ 提高安全性、可维护性
public class MathUtil {
private MathUtil() {
// 防止实例化
}
public static int add(int a, int b) {
return a + b;
}
}
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
| 修饰符 | 本类 | 同包 | 子类 | 不同包 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| default | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
❌ private 能被继承吗?
不能。子类无法继承父类的 private 成员,但子类对象中仍然存在该成员(只是不能直接访问)。
❌ private 能被反射访问吗?
可以(但属于特殊手段,不推荐常规使用)
field.setAccessible(true);
✅ private 用于封装,限制访问范围,只在本类中可见,是 Java 封装思想的核心。
如果你愿意,我也可以帮你对比 private / protected / public 的实际使用场景,或者结合 面试常问点 讲一遍。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。