如何访问位于Java中另一个类的另一个方法内的类内的方法

时间:2017-07-28 06:41:16

标签: java inner-classes

下面是成功编译的程序,但是如何访问类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

2 个答案:

答案 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 类。使它成为内部阶级,甚至是(非公开的)顶级阶层。