黑马程序员技术交流社区
标题:
匿名内部类问题提问。。。
[打印本页]
作者:
涐扪①起奮乧
时间:
2013-10-29 18:01
标题:
匿名内部类问题提问。。。
本帖最后由 杨增坤 于 2013-11-1 15:15 编辑
class Outer
{
abstract class AbsDemo
{
abstract void show();
}
int x = 10;
/*
class Inner extends AbsDemo//继承一个外部其他类,如果继承Outer没什么意义,本来就在Outer类中
{
void show()
{
System.out.println("show:"+x);
}
}
*/
public void function()
{
//new Inner().show();
new AbsDemo()
{
void show()
{
System.out.println("x="+x);
}
void run()
{
System.out.println("hello");
}
}.show();//只能调用一个方法,不能同时调用.run()和.show()
new AbsDemo()
{
void show()
{
System.out.println("x="+x);
}
void run()
{
System.out.println("hello");
}
}.run();
}
}
class Demo
{
public static void main(String[] args)
{
new Outer().function();
}
}
复制代码
我想问的是,这个程序里面调用了show()方法,也调用了run()方法,那么是同一个内部类对象在调用这个两个方法还是有两个对象,一个内部类对象在调用show()方法,另外一个内部类对象在调用run()方法,这方面还是有疑惑。我建立的是一个new Outer()匿名子类对象。但就这个程序,具体的一步一步的执行过程,还请懂得人给讲解一下。万分感激。。。
作者:
零下五度的水
时间:
2013-10-29 18:51
main - function - 第一个 new absDemo(){...}.show() - 第二个 new absDemo(){...}.run()
你的问题我不太理解,一个new出来的匿名实例在执行完成之后会自动被JVM当垃圾回收
你这里面就是 function中第一个匿名实例跑完show方法被回收,然后第二个匿名实例跑完run方法被回收,然后主函数里的匿名实例跑完被回收,结束
作者:
ヅ飞飞
时间:
2013-10-29 18:59
本帖最后由 ヅ飞飞 于 2013-10-29 19:01 编辑
是两个对象(因为new了两次)。一个对象调用了show方法另一个调用了run方法。
分析程序流程:
new Out().function();
new了一个Out类的对象,调用了function方法,
循序执行function方法,
先new了一个AbsDemo类的子类对象重写AbsDemo类show方法自己添加新方法run().并调用show方法,调用结束因为没有引用指向该对象所以调用后会被垃圾回收。
(注意:匿名内部类new的是子类对象)
接下来有new了一个AbsDemo子类对象,并调用自己的方法run().然后被回收。
作者:
黄炳期
时间:
2013-10-29 20:34
如果问题已经解决,请及时修改主题为“提问结束”
作者:
带你去看海
时间:
2013-10-29 20:56
我只是来打酱油 学习的
作者:
To
时间:
2013-10-30 00:12
楼主你好,如果问题已解决请将帖子状态修改为提问结束,
如果未解决请继续追问,谢谢合作
修改方法请看解释帖:
http://bbs.itheima.com/thread-89313-1-1.html
作者:
李新辉
时间:
2013-10-30 09:42
ヅ飞飞 发表于 2013-10-29 18:59
是两个对象(因为new了两次)。一个对象调用了show方法另一个调用了run方法。
分析程序流程:
new Out().fu ...
应该是先把 AbsDemo()方法 重写之后再建立其子类对象吧....
对象怎么可能先于类存在呢?
这段代码中一个有5个对象....
new Out()初始化的时候建立两个 AbsDemo()的子类匿名对象(两个对象)并分别调用本类对象的show()和fun()。
new out()这个匿名对象(第三个对象)调用 function()时又产生两个 AbsDemo()的匿名对象(一共五个对象),并分别调用本类对象的show()和run()
不知我说的楼主能否理解,也不知道对不对
大家支出错误。。。
多交流,大家一起进步。。。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2