下面是成功编译的程序,但是如何访问类A的m1()方法中的B类m2()方法。
class A{
public void m1()
{
System.out.println("A-m1");
class B{
public void m2()
{
System.out.println("B-m2");
}
}//end of class B
}//end of m1() method
}// end of class A
答案 0 :(得分:3)
这一切都取决于范围。如果您想在m2()
末尾调用m1()
,那么就像创建B
的新实例并调用该方法一样简单。
new B().m2()
如果你想在方法之外或声明之前调用它,它不会因为范围而允许你。
如果是这种情况,您应该考虑将其范围提升到类级别。
答案 1 :(得分:2)
简单:你不能在课堂之外(好吧,不合理)。
B是 local 类 - 它只存在于该方法m1()
的范围内。因此,您可以仅在该方法中实例化它。因此,在m1()中,您可以执行简单的B b = new B()
,然后调用b.m2()
。但是在该方法之外,没有语法允许您“获取”A.m1().B.m2()
。
那么,您也可以使用反射在该方法的外实例化它。你看,该类的受损名称是A $ 1B.class。
因此您可以使用Class.forName("A$1B")
来获取相应的类;然后当你有一个A类实例时,你可以再次使用反射来实例化该本地类的对象。在那个例子中,你可以再次使用反射调用m2()。
但是:你甚至不应该尝试来做到这一点。如果需要从其他地方调用类B及其方法m2(),则只需将其设为 local 类。使它成为内部阶级,甚至是(非公开的)顶级阶层。