繁体   English   中英

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

[英]How can I access a method that is inside a class that is inside another method of another class in Java

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

这一切都取决于范围。 如果要在m1()的末尾调用m2() ,就像创建B的新实例并调用方法一样简单。

new B().m2()

如果你想在方法之外或在声明之前调用它,它将不允许你因为范围。

如果是这种情况,您应该考虑将其范围提升到类级别。

简单:你不能在课堂之外(好吧,不是以合理的方式)。

B是一个本地类 - 它只存在于该方法m1()的范围内。 因此,您只能在该方法中实例化它。 因此,在m1()中,你可以做一个简单的B b = new B() ,然后调用b.m2() 但是在该方法之外,没有语法允许您“获取”到A.m1().B.m2()

好吧,你也可以使用反射在该方法之外实例化它。 你看,这个类的错位名是A $ 1B.class。

因此,您可以使用Class.forName("A$1B")来获取相应的类; 然后当你有一个A类实例时,你可以再次使用反射来实例化该本地类的对象。 在那个例子中,你可以再次使用反射调用m2()。

但是:你甚至不应该尝试这样做。 如果需要从其他地方调用类B及其方法m2(),那么就不要使它成为本地类。 使它成为内部阶级,甚至是(非公开的)顶级阶级。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM