黑马程序员技术交流社区
标题:
关于内部类调用顺序问题
[打印本页]
作者:
尹旗龙
时间:
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