Java 内部类访问外部类方法,方法名称相同

Java 内部类访问外部类方法,方法名称相同,java,inner-classes,Java,Inner Classes,我有一节课和一节课 01 public class A{ 02 void test(){}; 03 public class B{ 04 void test(){ 05 test(); 06 } 07 } 08 } 好的,在第05行,我想进入A类的方法测试。 但是我进入了一个循环,因为我不知道如何指定使用类a的方法 有什么想法吗?类B不必是所谓的嵌套类来扩展类a public class B extends A { ... } 这样就可以像调用 如果

我有一节课和一节课

01 public class A{
02   void test(){};
03   public class B{
04     void test(){
05       test();
06     }
07   }
08 }
好的,在第05行,我想进入A类的方法测试。 但是我进入了一个循环,因为我不知道如何指定使用类a的方法


有什么想法吗?

类B不必是所谓的嵌套类来扩展类a

public class B extends A {
...

}
这样就可以像调用

如果您像这样调用test(),这就是我们所说的递归,并且将冻结到判决日

01 public class A{
02   void test(){};
03   public class B{
04     void test(){
05       test();  // local B.test() method, so recursion, use A.this.test();
06     }
07   }
08 }

编辑:正如@Thilo提到的:避免在外部类和内部类中使用相同的方法名,这将避免命名冲突。

如果将其设置为静态,则可以调用

A.test()
否则,您需要在B中使用A的实例

A a;
a.test();

你可以这样做:

public class A{
   void test(){
        System.out.println("Test from A");
    };
    public class B{
        void test(){
            System.out.println("Test from B");
            A.this.test();
        }
    }

    public static void main(String[] args) {
            A a = new A();
            B b = a.new B();
            b.test();
    }
}
然后您将获得以下输出:

Test from B
Test from A

这不是一个子类。如果你真的想让这个结构
A.this.test()
可以工作。@你说得对,它是一个内部类。对不起,4+1。一个可能更好的解决方案是将方法名更改为“不冲突”。一般来说,避免使用相同的方法名是正确的,但我的例子是一个Freemarker Hibernate模板,仅用于现有实例中的generarte delegator类。我在自己的代码中尝试过这一点,我得到了“非静态变量不能从静态上下文引用”。当我去掉A,它就变成了这个。test()(我从test中得到了一些东西),我得到了“找不到符号”。是因为我有一个返回值导致了错误吗?如果是的话,那么如何从外部函数向内部函数返回值
Test from B
Test from A