A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 希望的曙光 中级黑马   /  2013-1-10 15:15  /  1536 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 张向辉 于 2013-1-16 12:12 编辑

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

public class ShuChu {

    /**
      * @param args
      */
     public static void main(String[] args) {
         new ShuChu().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");
         }
     }
}

运行结果为:
middle
inner
为什么顺序是这样呢?
哪位可以把程序改成我想要的结果
即:
inner
middle
outer

点评

这个是语句执行顺序,你改一下顺序就行了  发表于 2013-1-10 16:02

评分

参与人数 1技术分 +1 收起 理由
李培根 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
谢谢

{:soso_e100:}
回复 使用道具 举报
程序运行时是怎么确定该加载哪个类的??不是很明白额,你知道不?
回复 使用道具 举报
本帖最后由 王少雷 于 2013-1-10 17:25 编辑

楼主定义成这样,我感觉有点说不过去,没意义。
如果非要你这样实现的话。
可以修改
void go() {
         class A {
             void m() {
                 System.out.println("inner");
             }
         }
         new A().m();
         //输出Inner
         new ShuChu().new A().m();
         //输出middle
         new 包名.A().m();
         //输出outer
     }
回复 使用道具 举报
这样试试  class A {
  public void m() {
         System.out.println("outer");
     }
}
public class ShuChu extends A {

    /**
      * @param args
      */
     public static void main(String[] args) {
         new ShuChu().go();
         new ShuChu().m();
     }
     void go() {
        class A {
             void m() {
                 System.out.println("inner");
             }
         }
         new A().m();
     }
       public void m() {
             System.out.println("middle");
             super.m();
         }   
}
利用的是super
回复 使用道具 举报
public  可以不要也是行的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马