黑马程序员技术交流社区

标题: 关于内部类的调用顺序问题? [打印本页]

作者: 希望的曙光    时间: 2013-1-10 15:15
标题: 关于内部类的调用顺序问题?
本帖最后由 张向辉 于 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:07
谢谢

{:soso_e100:}
作者: 黑马吕世成    时间: 2013-1-10 16:22
程序运行时是怎么确定该加载哪个类的??不是很明白额,你知道不?
作者: 王少雷    时间: 2013-1-10 17:24
本帖最后由 王少雷 于 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
     }
作者: Just_Only    时间: 2013-1-10 17:41
这样试试  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
作者: Just_Only    时间: 2013-1-10 17:42
public  可以不要也是行的




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2