正在回答
1回答
同学你好,同学描述的是访问私有内部类中的私有方法吗?如果是,则在 Java 中私有内部类中的私有方法无法直接从外部类进行访问。但可以通过以下方式来间接调用私有内部类方法:
1、通过公共接口或公共方法调用,可以创建一个公共接口或公共方法,然后在内部类中实现该接口或方法。外部类可以通过创建内部类的实例并调用公共接口或方法来间接调用私有方法。案例代码如下:
public class OuterClass {
// 私有内部类
private class InnerClass {
private void privateMethod() {
System.out.println("私有方法");
}
public void publicMethod() {
System.out.println("公共方法");
this.privateMethod(); // 调用私有方法
}
}
public void callPrivateMethod() {
// 通过InnerClass 的实例调用公共方法 publicMethod() 间接调用私有方法 privateMethod()。
InnerClass inner = new InnerClass();
inner.privateMethod(); // 间接调用私有方法
}
}2、通过反射机制调用,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法。
import java.lang.reflect.Constructor;
import java.lang.reflect.Method;
public class OuterClass {
// 私有内部类
private static class InnerClass {
// 私有方法
private void privateMethod() {
System.out.println("私有方法");
}
}
public void callPrivateMethod() {
try {
Class<?> innerClass = Class.forName("OuterClass$InnerClass"); // 获取内部类 Class 对象
Constructor<?> innerConstructor = innerClass.getDeclaredConstructor(); // 获取内部类构造方法
innerConstructor.setAccessible(true); // 设置构造方法为可访问
Object innerInstance = innerConstructor.newInstance(); // 创建内部类实例
Method privateMethod = innerClass.getDeclaredMethod("privateMethod"); // 获取私有方法
privateMethod.setAccessible(true); // 设置私有方法为可访问
privateMethod.invoke(innerInstance); // 调用私有方法
} catch (Exception e) {
e.printStackTrace();
}
}
}祝学习愉快!
2023版Java工程师
- 参与学习 人
- 提交作业 8788 份
- 解答问题 9886 个
综合就业常年第一,编程排行常年霸榜,北上广深月薪过万! 不需要基础,无需脱产即可学习,只要你有梦想,想高薪! 全新升级:技术栈升级(包含VUE3.0,ES6,Git)+项目升级(前后端联调与功能升级)
了解课程

恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星