黑马程序员技术交流社区

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

作者: 尹旗龙    时间: 2012-2-11 15:42
标题: 关于内部类调用顺序问题
本帖最后由 尹旗龙 于 2012-2-12 13:46 编辑

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
作者: 何洪森    时间: 2012-2-11 16:34
那就不要把内部类和外部类都定义成A,因为创建对象的时候
先是找内部是否有该类,有的话就会创建这个类的对象,如果
要想完成你的输出,可以把类不都定义成A
class A {
    void m() {
        System.out.println("outer");
    }
}
public class ShuChu {
    /**
     * @param args
     */
    public static void main(String[] args) {
        new ShuChu().go();
    }
    void go() {
        class C {
            void m() {
                System.out.println("inner");
            }
        }
        new C().m();
        new B().m();
    }
    class B {
        void m() {
            System.out.println("middle");
            new A().m();
        }
    }
}


作者: 尹旗龙    时间: 2012-2-11 16:36
何森 发表于 2012-2-11 16:34
那就不要把内部类和外部类都定义成A,因为创建对象的时候
先是找内部是否有该类,有的话就会创建这个类的对 ...

嗯 你说这事一种方法
作者: 侯丽星    时间: 2012-2-11 17:13
在不更改类名的情况下,我只能想到先打印inner,后打印middle的方法,若还将outer也打印出来,这个个人觉得没办法。除非你更改外部类A的类名,或将类A放在另一个包中。
ShuChu 类中的go方法做如下更改:
void go() {
        class A {
            void m() {
                System.out.println("inner");
            }
        }
        new A().m();        
        this.new A().m();
        
    }




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