正在回答
1回答
同学你好,同学描述的是访问私有内部类中的私有方法吗?如果是,则在 Java 中私有内部类中的私有方法无法直接从外部类进行访问。但可以通过以下方式来间接调用私有内部类方法:
1、通过公共接口或公共方法调用,可以创建一个公共接口或公共方法,然后在内部类中实现该接口或方法。外部类可以通过创建内部类的实例并调用公共接口或方法来间接调用私有方法。案例代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | 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、通过反射机制调用,反射机制允许在运行时检查和操作类和方法。可以使用反射机制创建内部类的实例,并调用其私有方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | 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(); } } } |
祝学习愉快!
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧