我是Java初学者。 任何人都可以解释为什么打印输出2?
interface Foo {
int bar();
}
public class Beta {
class A implements Foo {
public int bar() {
return 1;
}
}
public int fubar(final Foo foo) {
return foo.bar();
}
public void testFoo()// 2
{
class A implements Foo {
public int bar() {
return 2;
}
}
System.out.println(fubar(new A()));
}
public static void main(String[] args) {
new Beta().testFoo();
}
}
答案 0 :(得分:5)
那是因为你在这里重新定义了Class A
:
class A implements Foo {
public int bar() {
return 2;
}
}
System.out.println(fubar(new A()));
因此,当您执行return foo.bar();
时,您会返回2
答案 1 :(得分:3)
因为A的最内层定义在testFoo()
方法中,其方法bar()
返回2.
您可能还会发现今天的answer to my question很有趣。
答案 2 :(得分:0)
当你说System.out.println(fubar(new A()));
创建的类是在testFoo()中定义的类。
答案 3 :(得分:0)
在java中有很多地方可以使用更多本地名称隐藏更广泛的名称。参数vs成员变量,类名等都是如此。在您的情况下,您将使用方法中定义的A隐藏Beta.A.