java题库问题求解,谢谢

interfaceFoo{intbar();}publicclassBeta{classAimplementsFoo{publicintbar(){return1;}}p... interface Foo{
int bar();
}
public class Beta{
class A implements Foo{
public int bar(){return 1;}
}
public int fubar(Foo foo){return foo.bar();
public void testFoo(){
class A implements Foo{
public int bar(){return 2;}
}
system.out.println(fubar( new A() ));
}
public static void main(String[] args){
new Beta.testFoo();
}
}
结果输出2,为什么?求详细的过程谢谢
很混乱
展开
 我来答
匿名用户
推荐于2016-10-14
展开全部
public class Beta {
class A implements Foo {
public int bar() {
System.out.println("调用A.bar()");
return 1;
}
}

public int fubar(Foo foo) {
System.out.println("调用Beta.fubar(Foo foo)");
return foo.bar();
}

public void testFoo() {
System.out.println("调用Beta.testFoo()");
class A implements Foo {
public int bar() {
System.out.println("调用testFoo()的内部类A的bar()");
return 2;
}
}
System.out.println(fubar(new A()));
}

public static void main(String[] args) {
new Beta().testFoo();
}
}



输出

调用Beta.testFoo()

调用Beta.fubar(Foo foo)

调用testFoo()的内部类A的bar()

2

zhongtyler
2015-11-20 · TA获得超过4408个赞
知道大有可为答主
回答量:4384
采纳率:79%
帮助的人:915万
展开全部
任何代码运行的时候都是先找最近的作用域,然后再往上一层走。
你看代码就会发现,第二个Class A的定义和 new A()在同一个作用域里。当然会用第二个。

不过,如果你在软件公司写出这样的代码,会被一脚踢飞。
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
Lucky安逸
2015-11-20 · TA获得超过782个赞
知道小有建树答主
回答量:729
采纳率:0%
帮助的人:205万
展开全部
大概拜读了此代码,应该是重写了bar()方法。。。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式