在 Java 中,private 修饰的成员(字段、方法、构造器等)不能被外部类直接调用,这是 Java 访问控制的基本规则。
private:只能在本类内部访问示例:
class A {
private void test() {
System.out.println("private method");
}
}
class B {
void run() {
A a = new A();
// a.test(); // ❌ 编译错误:test() 在 A 中是 private
}
}
虽然 不能直接调用,但有以下“例外方式”:
class A {
private void test() {
System.out.println("private");
}
public void call() {
test(); // 本类内部调用
}
}
class B {
void run() {
new A().call(); // ✅ 合法
}
}
class Outer {
private int x = 10;
class Inner {
void show() {
System.out.println(x); // ✅ 合法
}
}
}
⚠️ 不推荐在正常业务中使用
import java.lang.reflect.Method;
class A {
private void secret() {
System.out.println("hacked");
}
}
public class Test {
public static void main(String[] args) throws Exception {
A a = new A();
Method m = A.class.getDeclaredMethod("secret");
m.setAccessible(true); // 关闭访问检查
m.invoke(a); // ✅ 可以调用
}
}
| 方式 | 能否调用 private |
|---|---|
| 普通外部类直接调用 | ❌ 不行 |
| 同包其他类直接调用 | ❌ 不行 |
| 本类内部调用 | ✅ 可以 |
| 内部类调用 | ✅ 可以 |
| 公共方法间接调用 | ✅ 可以 |
| 反射 | ✅ 可以(不安全) |
如果你是在 Spring / Android / 框架场景 下问这个问题,也可以告诉我具体场景,我可以结合例子讲。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。