在 Java 里,private 是访问权限修饰符,用来限制访问范围。一句话总结:
private只能在本类内部访问,外部(包括子类)都访问不到。
下面从「是什么 → 怎么用 → 为什么用 → 常见误区」一步步讲清楚。
public class Person {
private int age;
public void setAge(int a) {
age = a; // ✅ 本类内部可以访问
}
}
Person p = new Person();
// p.age = 10; ❌ 编译错误,外部不能访问 private
✅ 可以访问的地方
❌ 不能访问的地方
public class User {
private String name;
private int age;
// getter
public String getName() {
return name;
}
// setter
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
if (age >= 0) {
this.age = age;
}
}
}
✅ 为什么这样做?
| 能修饰 | 示例 |
|---|---|
| 成员变量 | private int x; |
| 方法 | private void test() |
| 构造方法 | private User() |
| 内部类 | private class Inner |
| 不能修饰 | 原因 |
|---|---|
| 类(顶层类) | 顶层类只能是 public 或 默认 |
| 接口方法 | 接口方法默认 public |
public class MathUtil {
private MathUtil() {} // 防止实例化
public static int add(int a, int b) {
return a + b;
}
}
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
⚠️ private 只是“访问控制”,不是“加密”
public class Test {
private int x = 10;
}
通过 反射 仍然可以访问:
Field f = Test.class.getDeclaredField("x");
f.setAccessible(true);
✅ 所以:
public class Parent {
private int x;
}
public class Child extends Parent {
// ❌ 不能访问 x
}
✅ 子类 不会继承 private 成员 (但对象里其实有,只是你不能直接用)
| 修饰符 | 本类 | 同包 | 子类 | 不同包 |
|---|---|---|---|---|
| private | ✅ | ❌ | ❌ | ❌ |
| 默认 | ✅ | ✅ | ❌ | ❌ |
| protected | ✅ | ✅ | ✅ | ❌ |
| public | ✅ | ✅ | ✅ | ✅ |
记住一句口诀:
private 最小,public 最大
✅ 用 private 的情况:
❌ 不建议 private 的情况:
private 的核心目的:隐藏实现细节,只暴露必要的接口。
如果你愿意,我可以:
你想从哪个角度继续?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。