最蛋疼的问题(内部类),挑战你得忍耐。

-迷糊- 2012-01-09 06:56:23

class A {
void m() {
System.out.println("outer");
}
}

public class TestInners {

/**
* @param args
*/
public static void main(String[] args) {
new TestInners().go();
}
void go() {
new A().m();
class A {
void m() {
System.out.println("inner");
}
}
new A().m();
}
class A {
void m() {
System.out.println("middle");
}
}
}



这为什么还跟声明顺序有关啊?
...全文
199 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
杀猪剑客 2012-01-11
  • 打赏
  • 举报
回复
4楼的意思应该是这样的吧:局部变量优先于成员变量。
-迷糊- 2012-01-11
  • 打赏
  • 举报
回复
#4解释的不错
Ganymede 2012-01-09
  • 打赏
  • 举报
回复
public class TT
{
int i = 100;
public static void main(String[] args)
{
new TT().go();
}
void go()
{
System.out.println(i);
int i = 50;
System.out.println(i);
}
}

楼主的代码执行顺序跟这段代码的原理一样,go方法里,第一次 new A().m();只能看到成员内部类,因为方法内部类就像方法局部变量一样,没有压入栈中。dubug一下就可以看到。把楼主的这些内部类都想象成我这里的变量i,一切都简单了。不是吗?
fairjm 2012-01-09
  • 打赏
  • 举报
回复
最外面的outer不会被输出是一定的了...
坐等解释.....................
如果按照运行顺序看....实例化的时候一定找离自己最近的一个....
那么第一个new A().m(); 方法中的A();是在它之后才有定义的.离他最近的是TestInners的内部类...它输出middle
第二个new A().m()离方法中的A最近..输出inner......
a317742804 2012-01-09
  • 打赏
  • 举报
回复
楼主好多内部类啊!

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧