在 Java 中,private 方法只能在定义它的类内部被调用,外部类(包括子类)无法直接访问。下面分几种常见情况说明如何“调用” private 方法。
public class Demo {
private void sayHello() {
System.out.println("Hello");
}
public void test() {
sayHello(); // ✅ 同一个类中可以直接调用
}
}
这是最常用、最规范的方式。
public class Demo {
private void sayHello() {
System.out.println("Hello");
}
public void callPrivate() {
sayHello(); // 公共方法内部调用 private 方法
}
}
外部调用:
Demo d = new Demo();
d.callPrivate();
✅ 这是设计 private 方法的正确方式,而不是强行突破访问限制。
如果你必须在类外部调用 private 方法(如测试、框架、调试),可以使用反射。
import java.lang.reflect.Method;
class Demo {
private void sayHello() {
System.out.println("Hello");
}
}
public class Test {
public static void main(String[] args) throws Exception {
Demo obj = new Demo();
Method method = Demo.class.getDeclaredMethod("sayHello");
method.setAccessible(true); // 关键:取消访问检查
method.invoke(obj);
}
}
⚠️ 注意风险:
SecurityExceptionclass Parent {
private void test() {}
}
class Child extends Parent {
public void call() {
test(); // ❌ 编译错误
}
}
原因:
private 不参与继承public class Demo {
private void init() {}
public Demo() {
init(); // ✅
}
}
class Demo {
private static void staticMethod() {
System.out.println("static");
}
public static void call() {
staticMethod(); // ✅
}
}
| 场景 | 是否可行 | 说明 |
|---|---|---|
| 同类中直接调用 | ✅ | 正常用法 |
| 通过 public 方法调用 | ✅ | 推荐 |
| 反射调用 | ✅ | 特殊场景 |
| 子类直接调用 | ❌ | private 不继承 |
| 外部类直接调用 | ❌ | 访问权限不允许 |
如果你有具体使用场景(如单元测试、Spring、内部类、继承问题),可以贴代码,我可以帮你选最合适的方案。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。