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