输出Java程序

时间:2011-05-03 15:19:11

标签: java oop

我是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();
    }
}

4 个答案:

答案 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.